拼图游戏--有无解判定方法
说明
不想看啰嗦的废话以及解说过程可以直接查看最后的红色加粗斜体的结论 ---- 如果结论部分没有该样式即为抄袭博客 支持原创 友情链接:
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 就可以还原
--------> 结论:
如果这个拼图序列中存在的逆序为偶数,那么这个拼图可以被还原到正确的顺序,如果不为偶数,那么不能被正确还原
附一张通关截图: