日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

三阶魔方自动还原 vc实现

發(fā)布時(shí)間:2025/7/25 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三阶魔方自动还原 vc实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? 魔方自動(dòng)求解程序一般有兩種方法,一種是按照人還原魔方的步驟,一步步來(lái),另外一種是使用數(shù)學(xué)方法,魔方自有一套復(fù)雜的數(shù)學(xué)理論,其中較著名的是兩階段算法(壓縮文件中的cube430.exe使用的就是數(shù)學(xué)方法,程序作者便是two-phase算法發(fā)明人,文檔中有該算法的簡(jiǎn)介,遺憾的是沒(méi)有找到該程序的源碼)。

本程序使用的便是第一種方法。

?

程序界面仿wca的cube430.exe(文件夾中的wca-explorer.zip是這個(gè)程序的壓縮包)
程序還有bug,程序可能自動(dòng)生成一個(gè)ml文件,用以保存bug發(fā)生時(shí)的魔方狀態(tài)。但也可能是其他錯(cuò)誤。
如果你把自動(dòng)生成的ml文件(在bug文件夾中)或者錯(cuò)誤信息Email給我,我會(huì)非常感激。

?

歡迎批評(píng)和建議。

?

這個(gè)程序還不完善,現(xiàn)階段僅供學(xué)習(xí)之用:

  • 尚未加入還原手法輸出功能
  • 尚未實(shí)現(xiàn)魔方狀態(tài)有效性檢測(cè)
  • 實(shí)驗(yàn)方法:

  • 依次點(diǎn)擊界面中的按鈕:
    Cross:??在Front面實(shí)現(xiàn)Cross,然后把Cross轉(zhuǎn)到底面(x')
    L1Corner:?還原底層角塊
    L2Edge:?還原第二層棱塊
    TopCross:?建立頂層十字
    MatchCross:?對(duì)好十字
    BackTopCorner?頂層四角塊歸位
    RestoreTopCorener還原四角塊
  • rotate組合框中是幾個(gè)常用的魔方旋轉(zhuǎn)操作,但是太少,可以使用Excute按鈕前面的文本框輸入旋轉(zhuǎn)命令。命令名參考文件夾中的command-conventions.bmp中示意的命令名約定。
  • Reset按鈕重置魔方
  • Empty便于抄寫(xiě)魔方。點(diǎn)擊每個(gè)面這中間塊,則選中該塊顏色,點(diǎn)擊非中間塊,則該塊顏色被改為當(dāng)前選中顏色。由于尚未加入魔方有效性檢測(cè),如果改變顏色后使魔方無(wú)效,則程序會(huì)出錯(cuò)。
  • save和open按鈕用來(lái)保存和打開(kāi)魔方狀態(tài)文件(*.ml)
  • random打亂魔方狀態(tài)
  • solution按鈕相當(dāng)于連續(xù)執(zhí)行了步驟1 中提到的按鈕對(duì)應(yīng)的函數(shù)
  • ??? 本程序試圖使用兩套手法實(shí)現(xiàn)魔方還原,但現(xiàn)在只實(shí)現(xiàn)了一種(兩套手法的任意一種都能使程序正常運(yùn)行)。兩種手法的區(qū)別在于第三層的還原。前兩層是一樣的。
    第一種手法的Cross的實(shí)現(xiàn)使用的是當(dāng)前流行手法。其余的步驟用到的手法主要參考了文件夾中的“魔方教程.pdf”,作者是廈門(mén)大學(xué)的何美生。程序中的函數(shù)與教程中的步驟是一一對(duì)應(yīng)的。
    本程序使用到的資料在information文件夾中。

    ?

    下面幾個(gè)函數(shù)
    ?? //2:cfop
    ?? void HashOLL(char*);
    ?? bool IsTopFaceRestored(void);
    ?? void OLL(void);
    ?? void HashPLL(char*);//not finished
    ?? void PLL(void);
    ?? void CFOP(void);
    是第二套手法用到的函數(shù),其中的最后一步
    ?? void HashPLL(char*);//not finished
    ? ?void PLL(void);
    兩個(gè)函數(shù)尚未實(shí)現(xiàn)。

    ?

    經(jīng)驗(yàn)總結(jié):

  • 當(dāng)要處理的狀態(tài)是很多可能狀態(tài)之一,而識(shí)別出當(dāng)前的狀態(tài)是哪種狀態(tài)又比較困難時(shí),可以考慮構(gòu)造hash函數(shù),以區(qū)別每一種狀態(tài)。求出所有可能狀態(tài)的hash值和當(dāng)前狀態(tài)hash值,識(shí)別當(dāng)前狀態(tài)是哪種狀態(tài)時(shí)搜索hash值即可。本程序中第二種手法還原頂面時(shí)即用到該方法。使用狀態(tài)hash的方法,可以屏蔽掉狀態(tài)的復(fù)雜性。但是我想到這個(gè)方法時(shí),前面的程序已經(jīng)成型了,所以第一種方法實(shí)現(xiàn)時(shí)還是用了很多if-else或者switch,搞得頭暈。
  • 本程序在調(diào)試時(shí)也遇到了很大麻煩,不可能一開(kāi)始就設(shè)斷點(diǎn)調(diào)試的。后來(lái)采用的方法是每一個(gè)函數(shù)在出現(xiàn)問(wèn)題時(shí)保存當(dāng)前狀態(tài)成文件,然后打開(kāi)文件,繼續(xù)執(zhí)行時(shí)才在對(duì)應(yīng)函數(shù)中設(shè)斷點(diǎn)調(diào)試

    歡迎此類(lèi)經(jīng)驗(yàn)的交流,如果你想到或用到了其他的方法,歡迎跟大家一起分享。
  • ?

    源碼下載?http://download.csdn.net/source/2772692

    有些朋友下載后運(yùn)行不了,是我的失誤,如果你沒(méi)裝vs2008,可能運(yùn)行不了,因?yàn)関s2008編譯后的程序要用到mfc90.dll等幾個(gè)vs2008中的動(dòng)態(tài)鏈接庫(kù),而我在上傳時(shí)沒(méi)考慮到這點(diǎn)。那么暫時(shí)請(qǐng)用自己的編譯器重新編譯吧,把我的代碼只在cXDlg的頭文件和cpp文件中,很容易重新編譯的。

    至于解壓不了,應(yīng)該是下載時(shí)出現(xiàn)的錯(cuò)誤,請(qǐng)重新下載。

    ?

    程序運(yùn)行截圖:

    1.打亂?

    ?

    ?

    2.Cross:??在Front面實(shí)現(xiàn)Cross,然后把Cross轉(zhuǎn)到底面(x')

    ?

    3.L1Corner:?還原底層角塊

    ?

    4.L2Edge:?還原第二層棱塊

    ?

    5.TopCross:?建立頂層十字?

    ?

    6.MatchCross:?對(duì)好十字

    ?

    7.BackTopCorner?頂層四角塊歸位

    8.RestoreTopCorener還原四角塊

    ?

    ?

    先前用OpenGL寫(xiě)了一個(gè)三維魔方,但是不會(huì)自動(dòng)還原,而且沒(méi)有加入360°視角轉(zhuǎn)換和旋轉(zhuǎn)動(dòng)態(tài)。

    以后可能把自動(dòng)還原寫(xiě)成3d,這樣可以更直觀,更酷

    ?

    ?

    =====================================================

    更新:

    魔方自動(dòng)還原程序3D版本和2D 修正版已經(jīng)放出來(lái)了

    http://blog.csdn.net/onezeros/archive/2010/10/25/5964280.aspx

    總結(jié)

    以上是生活随笔為你收集整理的三阶魔方自动还原 vc实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。