魔方自動求解程式一般有兩種方法,一種是按照人還原魔方的步驟,一步步來,另外一種是使用數學方法,魔方自有一套複雜的數學理論,其中較著名的是兩階段演算法(壓縮檔中的cube430.exe使用的就是數學方法,程式作者便是two-phase演算法發明人,文檔中有該演算法的簡介,遺憾的是沒有找到該程式的源碼)。
本程式使用的便是第一種方法。
程式介面仿wca的cube430.exe(檔案夾中的wca-explorer.zip是這個程式的壓縮包)
程式還有bug,程式可能自動產生一個ml檔案,用以儲存bug發生時的魔方狀態。但也可能是其他錯誤。
如果你把自動產生的ml檔案(在bug檔案夾中)或者錯誤資訊Email給我,我會非常感激。
歡迎批評和建議。
這個程式還不完善,現階段僅供學習之用:
- 尚未加入還原手法輸出功能
- 尚未實現魔方狀態有效性檢測
實驗方法:
- 依次點擊介面中的按鈕:
Cross: 在Front面實現Cross,然後把Cross轉到底面(x')
L1Corner: 還原底層角塊
L2Edge: 還原第二層棱塊
TopCross: 建立頂層十字
MatchCross: 對好十字
BackTopCorner 頂層四角塊歸位
RestoreTopCorener還原四角塊
- rotate組合框中是幾個常用的魔方旋轉操作,但是太少,可以使用Excute按鈕前面的文字框輸入旋轉命令。命令名參考檔案夾中的command-conventions.bmp中示意的命令名約定。
- Reset按鈕重設魔方
- Empty便於抄寫魔方。點擊每個面這中間塊,則選中該塊顏色,點擊非中間塊,則該塊顏色被改為當前選中顏色。由於尚未加入魔方有效性檢測,如果改變顏色後使魔方無效,則程式會出錯。
- save和open按鈕用來儲存和開啟魔方狀態檔案(*.ml)
- random打亂魔方狀態
- solution按鈕相當於連續執行了步驟1 中提到的按鈕對應的函數
本程式試圖使用兩套手法實現魔方還原,但現在只實現了一種(兩套手法的任意一種都能使程式正常運行)。兩種手法的區別在於第三層的還原。前兩層是一樣的。
第一種手法的Cross的實現使用的是當前流行手法。其餘的步驟用到的手法主要參考了檔案夾中的“魔方教程.pdf”,作者是廈門大學的何美生。程式中的函數與教程中的步驟是一一對應的。
本程式使用到的資料在information檔案夾中。
下面幾個函數
//2:cfop
void HashOLL(char*);
bool IsTopFaceRestored(void);
void OLL(void);
void HashPLL(char*);//not finished
void PLL(void);
void CFOP(void);
是第二套手法用到的函數,其中的最後一步
void HashPLL(char*);//not finished
void PLL(void);
兩個函數尚未實現。
經驗總結:
- 當要處理的狀態是很多可能狀態之一,而識別出當前的狀態是哪種狀態又比較困難時,可以考慮構造hash函數,以區別每一種狀態。求出所有可能狀態的hash值和目前狀態hash值,識別目前狀態是哪種狀態時搜尋hash值即可。本程式中第二種手法還原頂面時即用到該方法。使用狀態hash的方法,可以屏蔽掉狀態的複雜性。但是我想到這個方法時,前面的程式已經成型了,所以第一種方法實現時還是用了很多if-else或者switch,搞得頭暈。
- 本程式在調試時也遇到了很大麻煩,不可能一開始就設斷點調試的。後來採用的方法是每一個函數在出現問題時儲存目前狀態成檔案,然後開啟檔案,繼續執行時才在對應函數中設斷點調試
歡迎此類經驗的交流,如果你想到或用到了其他的方法,歡迎跟大家一起分享。
源碼下載 http://download.csdn.net/source/2772692
有些朋友下載後運行不了,是我的失誤,如果你沒裝vs2008,可能運行不了,因為vs2008編譯後的程式要用到mfc90.dll等幾個vs2008中的動態連結程式庫,而我在上傳時沒考慮到這點。那麼暫時請用自己的編譯器重新編譯吧,把My Code只在cXDlg的標頭檔和cpp檔案中,很容易重新編譯的。
至於解壓不了,應該是下載時出現的錯誤,請重新下載。
程式運行:
1.打亂
2.Cross: 在Front面實現Cross,然後把Cross轉到底面(x')
3.L1Corner: 還原底層角塊
4.L2Edge: 還原第二層棱塊
5.TopCross: 建立頂層十字
6.MatchCross: 對好十字
7.BackTopCorner 頂層四角塊歸位
8.RestoreTopCorener還原四角塊
先前用OpenGL寫了一個三維魔方,但是不會自動還原,而且沒有加入360°視角轉換和旋轉動態。
以後可能把自動還原寫成3d,這樣可以更直觀,更酷
=====================================================
更新:
魔方自動還原程式3D版本和2D 修正版已經放出來了
http://blog.csdn.net/onezeros/archive/2010/10/25/5964280.aspx