windows,vs2008
c++
opengl,glut
PATH=$(SolutionDir)glut\
程序第一次运行时,会在当前目录下生成一些数据文件,由于有大量计算所以启动可能比较慢 以后的运行,会直接加载这些文件,所以会快很多
数字键2-9——选择对应阶的魔方
s —— 自动还原魔方(2阶为最优解,3阶可能非最优解,不过一般少于30个face move,4阶及以上为模拟人工还原)
r —— 重置魔方
R —— 随机魔方 (该随机一定可解)
t —— 透明魔方
拖拽魔方——魔方对应层旋转
拖拽黑色背景——魔方整体旋转
- 时间 x-魔方阶数,y-还原时间ms,曲线为二次拟合 上面是的数据是对3到31,100,850 阶的魔方随机打乱并还原50次,然后分别取旋转花费时间的平均值。
-
900阶的时候解的长度过大,程序报std::bad_alloc错误,估计是堆空间用完了。
-
具体数据
cube order | repeat time total (s) | time average(ms) | move average |
---|---|---|---|
2 | 1000 | 0.007 | 0.007 |
3 | 100 | 37.449 | 374.49 |
4 | 50 | 16.695 | 333.9 |
5 | 50 | 13.516 | 270.32 |
6 | 50 | 15.617 | 312.34 |
7 | 50 | 21.543 | 430.86 |
8 | 50 | 20.381 | 407.62 |
9 | 50 | 14.685 | 293.7 |
10 | 50 | 16.008 | 320.16 |
11 | 50 | 35.858 | 717.16 |
12 | 50 | 20.17 | 403.4 |
13 | 50 | 19.681 | 393.62 |
14 | 50 | 27.282 | 545.64 |
15 | 50 | 31.797 | 635.94 |
16 | 50 | 31.525 | 630.5 |
17 | 50 | 27.643 | 552.86 |
18 | 50 | 28.863 | 577.26 |
19 | 50 | 29.651 | 593.02 |
20 | 50 | 27.923 | 558.46 |
21 | 50 | 38.591 | 771.82 |
22 | 50 | 35.416 | 708.32 |
23 | 50 | 34.338 | 686.76 |
24 | 50 | 40.879 | 817.58 |
25 | 50 | 35.642 | 712.84 |
26 | 50 | 43.829 | 876.58 |
27 | 50 | 42.42 | 848.4 |
28 | 50 | 41.459 | 829.18 |
29 | 50 | 49.304 | 986.08 |
30 | 50 | 51.157 | 1023.14 |
31 | 50 | 49.363 | 987.26 |
11 | 10 | 4.132 | 413.2 |
21 | 10 | 5.578 | 557.8 |
31 | 10 | 10.176 | 1017.6 |
41 | 10 | 16.372 | 1637.2 |
51 | 10 | 25.354 | 2535.4 |
61 | 10 | 34.48 | 3448 |
71 | 10 | 42.424 | 4242.4 |
81 | 10 | 58.974 | 5897.4 |
91 | 10 | 70.468 | 7046.8 |
101 | 10 | 84.932 | 8493.2 |
51 | 5 | 10.954 | 2190.8 |
101 | 5 | 43.207 | 8641.4 |
151 | 5 | 92.297 | 18459.4 |
201 | 5 | 163.375 | 32675 |
251 | 5 | 253.432 | 50686.4 |
301 | 5 | 365.872 | 73174.4 |
351 | 5 | 593.14 | 118628 |
401 | 5 | 765.271 | 153054 |
451 | 5 | 896.056 | 179211 |
501 | 5 | 1101.89 | 220377 |
551 | 5 | 1456.39 | 291278 |
601 | 5 | 1519.2 | 303840 |
651 | 5 | 1723.11 | 344621 |
701 | 5 | 1884.79 | 376958 |
751 | 5 | 2387.13 | 477426 |
801 | 5 | 2834.6 | 566920 |
851 | 5 | 2882.66 | 576532 |
由于2阶魔方的状态数较少,所以把每种状态的深度,和当前的旋转动作,做成表,直接查找即可
two phase算法,具体参考
http://kociemba.org/cube.htm
模拟人工还原
根据魔方的状态数公式 打乱算法理论上可以到达所有可解状态