拼圖,就是将1-8這幾個數字,通過移動後,按照順序排列,比如下圖,
排列完成後成為
實作的算法如下:
可以把空格認為是0,每一次移動就是數字0和周圍的數字做一次交換。
1.比如對狀态A,數字0在4個方向上嘗試(有的位置不能再移動,忽略該狀态)後,得到4個不同的狀态A1,A2,A3,A4。那麼可以有一棵樹以A為根,A1,A2,A3,A4都為葉子節點。檢測這4個節點是否已經滿足結果,如果是,則已經找到解了。然後順着這個葉子結點,一路向上逆序到它的父節點,所經過的所有葉子節點,即為每一步的狀态。如果否,則下一步。
2.建立一個集合,記錄所有的狀态,當新出現的狀态是之前未曾有過的,則将該狀态,即該葉子節點都放入一個隊列。