天天看點

Javascript實作拼圖算法

拼圖,就是将1-8這幾個數字,通過移動後,按照順序排列,比如下圖,

Javascript實作拼圖算法

排列完成後成為

Javascript實作拼圖算法

實作的算法如下:

可以把空格認為是0,每一次移動就是數字0和周圍的數字做一次交換。

1.比如對狀态A,數字0在4個方向上嘗試(有的位置不能再移動,忽略該狀态)後,得到4個不同的狀态A1,A2,A3,A4。那麼可以有一棵樹以A為根,A1,A2,A3,A4都為葉子節點。檢測這4個節點是否已經滿足結果,如果是,則已經找到解了。然後順着這個葉子結點,一路向上逆序到它的父節點,所經過的所有葉子節點,即為每一步的狀态。如果否,則下一步。

2.建立一個集合,記錄所有的狀态,當新出現的狀态是之前未曾有過的,則将該狀态,即該葉子節點都放入一個隊列。

繼續閱讀