聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

天天消息!掃雷和空當接龍freecell:算法深度優先

來源:CSDN 時間:2023-02-10 13:46:18

研究掃雷和空當接龍 freecell


(資料圖片)

搜到幾個代碼, 總是沒有源代碼, 不爽

就寫了個

本來用a* 算法, 好像出不來

然后使用深度優先, 有些可以快速得到結果.

最大移動張數計算方式:(可用單元+1)×(閑置列+1)

代碼放到

https://bird-self-lib.googlecode.com/svn/branches/FreeCellCalculate

下載應該不需要權限

一張牌

Card

內部2種表達方式

1. 從0-52的序列, 把4套牌都排序了. 梅花的0-12, 方塊的...這個占字節少,快速.

2. 用type和number,  花色是type, 1-10,jqk 這些是number, 這個方便調試.

class CCard    {        #if CARD_1_BYTE        UINT8       m_num;#else        eType       m_type;        eNumber     m_number;  //0-9(1-10), 11- J, 11- Q, 12- K#endif    };

一個狀態 叫一個State, 如圖

左上角是bench, 右上角是拍好序的sorted

下面就是牌. 每豎是一個list

每豎行是一個column,

class CState{public:        UINT                    m_id;    UINT                    m_idxFather;    bool                    m_hasGenSon;    ListInt                 m_idxSon;    UINT16                  m_value;    UINT8                   m_step;    UINT                    m_hash;    //std::string             m_str;    VecCard                 m_vecIdxSorted;   //4 vec, save show card    VecCard                 m_vecBench;       //4 card     typedef std::vectorVecListCard;    VecListCardm_vecVecIdx;};

算法,深度優先

從開局的state開始

生成他的所有子步驟, 每個都是一個son state

每個都算出一個value

然后把最低value的當作當前節點,

再次遍歷

找到完成的狀態.

如果找不到就依次退回到父節點.

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 岛国精品在线