自己做了一个拼图小游戏,大概如下:
1 2 3
4 5 6
7 8 0
0是空白位置,每次按照随机的顺序重新排列,但是不是每次排列后都可能被还原,例如:
1 2 3
4 5 6
8 7 0
这样是复原不了的
----------------------割----------------------------
第一种解决办法:
后来查了一些方法,其中有提到“逆序数”的概念,通过两个矩阵的逆序数奇偶是否相同,可以判断两个矩阵,其中一个矩阵是否可以通过相邻位置的对象两两互换位置后调整成另外一个矩阵。
(逆序数)
但是亲测后发现只用逆序数判断还是没能成功,因为拼图游戏只能通过“0”位(空白位置)和其相邻的位置进行互换。
这里判断还需要加上两个矩阵空白位置所在矩阵的行列数进行判断。
最终的判断方法是判断两个矩阵的 :
逆序数 + “0”的行数 + “0”的列数 的和
的奇偶性是否相同
如果相同则,则可以还原拼图,不相同则不可还原。
以上面的矩阵为例子:
第一个矩阵空白块所在位置为 a[2][2]. 逆序数为8
和为: sum = 2 + 2 + 8 = 12;
第二个矩阵空白块所在位置是 a[2][2],逆序数为9
和为:sum = 2 +2 + 9 = 13;
12 为偶数,13为奇数,所以如果拼图打乱成这个顺序是不能被还原的。
第二种解决办法:
让空白格随机和周边的方块交换位置,这样这样走几十步就可以了,而且一定可以复原。
参考文档:
自娱自乐做了一个拼图小游戏: