Javascript實現拼圖算法

拼圖,就是將1-8這幾個數字,經過移動後,按照順序排列,好比下圖,算法

clipboard

排列完成後成爲chrome

clipboard[1]

實現的算法以下:ide

能夠把空格認爲是0,每一次移動就是數字0和周圍的數字作一次交換。3d

1.好比對狀態A,數字0在4個方向上嘗試(有的位置不能再移動,忽略該狀態)後,獲得4個不一樣的狀態A1,A2,A3,A4。那麼能夠有一棵樹以A爲根,A1,A2,A3,A4都爲葉子節點。檢測這4個節點是否已經知足結果,若是是,則已經找到解了。而後順着這個葉子結點,一路向上逆序到它的父節點,所通過的全部葉子節點,即爲每一步的狀態。若是否,則下一步。blog

2.建立一個集合,記錄全部的狀態,當新出現的狀態是以前不曾有過的,則將該狀態,即該葉子節點都放入一個隊列。隊列

3.從該隊列中取出一個狀態,再進行4個方向上的嘗試,即回到第一步。ip

4.一直重試,直到隊列爲空,則說明無解。get

附件是代碼,在chrome下運行。it

相關文章
相關標籤/搜索