九宫格拼图随机打乱顺序之后,据说有50%的几率是不能成功拼回去的,所以在做拼图这个Android游戏的时候难免就要考虑是否有解了
下面是一种解决该问题的算法。
如图是一种情况,我们要把5和X交换,X代表的是空白块
那我们要怎么样才能知道这种情况是否有解呢?
1,2,3,4,X,6,7,8,5 依次排列成序列A
依次求第i位数(不包括X)对应的倒置变量值Ti,即位于第i位之后,比第i位数字小的数字(不包括X)的个数
求和,得到倒置和
有解的条件是:
(1)如果序列A长度为奇数。则倒置和必须为偶数
(2)如果序列A长度为偶数。如果空格位于倒数第奇数行,则倒置和必须是偶数;如果空格位于倒数第偶数行,则倒置和必须是奇数
如上例中倒置变量值为0,0 ,0, 0,1,1,1, 0 倒置和为奇数3 序列A长度为奇数9, 不满足条件 无解