說明
不想看啰嗦的廢話以及解說過程可以直接查看最后的紅色加粗斜體的結論 ---- 如果結論部分沒有該樣式即為抄襲博客 支持原創 友情鏈接:
https://www.cnblogs.com/283383765pw/articles/9872910.html
引言
在我學習網頁設計的時候自己寫了一個拼圖的小游戲,沒事玩一玩,在一次和小伙伴比誰最快的速度通關的時候,發現怎么都拼不完整,感覺這個游戲好難!然后他問我有沒有可能沒有解。
后來我在網上查了一下,確實有可能無解,最后修改了一下源文件,發現一下拼圖游戲又變得簡單了!
資源
如果有興趣了解的可以看一下我寫的案例,很簡單,但時我承認代碼寫得很差,初學的時候寫的…… 勿嘲。
代碼該有的注釋齊全可以很快了解程序結構 想要調試、運行程序推薦使用chrome瀏覽器(沒有做其他瀏覽器的兼容處理,可能會遇到不期望的結果)
資源地址:
最初版本 --- 鏈接: https://pan.baidu.com/s/18IqToR7i0qE9vxBjYI9O1g 提取碼: d4au
無解驗正版本 --- 鏈接: https://pan.baidu.com/s/1rxRyxkgFni7VO6rliQhMLw 提取碼: sni4
在線試玩:
在線試玩 ----- > 無解驗證版本
判定
最開始我在想怎么判定的時候也是一頭霧水,完全摸不着頭腦,但是在無意間發現一個貼子,有詳細說明這個地址,由於寫博客距上次修改源碼已經有一段事件了,所以我也忘了在那個地方看的了,下面簡單介紹一下思路
我們設定有一個3*3的拼圖如下:
1,2,3
4,5,6
7,8,9
從第一排開始編號1,2,3;第二排4,5,6;第三排7,8,9 這種時候就是拼圖正確的順序
設 9 號為空白,可以和上、下、左、右的互換 那么可見的方塊也是按順序排序的:
1,2,3,
4,5,6,
7,8 ,
如果此時我們把7和白色隱藏的8號互換,那么此時的結果為:
1,2,3
4,5,6
8,7,
此時整個方塊的序列中 存在一個****逆序****
逆序:大號的排在小號前面,例如上面的8號排在7號前面
這種時候是無論如何都不能交換7,8號的位置的,如果有請像下面這樣指出操作順序 此時的逆序為1
如果我們把最開始的順序中的5和8互換位置:
1,2,3
4,8,6
7,5,
此時逆序 8>6 8>7 8>5 6>5 7>5 5個逆序
此時不論如何也是不能將8,6,5移動到正確的位置的,如果有請像下面這樣指出操作順序
如果我們把最初的順序的6,8,7交換位置如下:
1,2,3
4,5,8
6,7
存在逆序:8>6 8>7 2個逆序
這種時候時可以移動到真確的位置的
依次點擊:7,6,4,5,6,7,8,6,5,4,8 就可以還原
--------> 結論:
如果這個拼圖序列中存在的逆序為偶數,那么這個拼圖可以被還原到正確的順序,如果不為偶數,那么不能被正確還原
附一張通關截圖: