拼图游戏研究
Benkong Xiao 2008/9/20
未经许可,不得转载
一、问题描述
拼图游戏起源于西方,发明与19世纪70年代,据说是由著名的美国拼图制造者SamLoyd(1841-1911)发明的。在一段时间内,这种拼图在欧洲十分流行,并且被冠以各种名字。其规则就是将一幅图像分割成m行n列(m*n>1),然后将右下方最后一块去掉,随机放在m*n的一个表格里,从而有一块空格留出,要求玩者通过上下左右将图片与其旁边的空格不停的交换,直到最终将其还原为一幅完整的图片。
将其转化为数学问题描述就是:随机将编号1到m*n-1的球填入一个m行n列的方格里,其中有一个空格,任何一个球都只能在其身边有空格的情况下才可以移动,并且位置与空格交换,现在要求玩者将这些球按其编号顺序移入到表格中对应的单元格中,其中单元格格的编号按从左到右,从上到下进行编号。
二、问题提出
现在存在一个问题,即每次球被随机打乱后,一定能移动成功吗?或者说有解吗?如果有解?那这种有解概率是多少?对于不同的M*N的表格(行列不相同),其解的概率也不同吗?分别又是多少?
三、重要结论及其证明
结论1:
对于2*2方格,将编号1到3(2*2-1)的球随机填入表格中,则其解的概率为1/2。
证明:
将编号1到3(2*2-1)的球随机填入表格中其排列组合方式共有C13 *C23* C33=6种,分别如下:
|
|
|
|
|
|
其中上排中后面二种方式通过移动,都可变为第上排的第一种,此模式为有解模式。
下排中的后面两种方式通过移动也可变为下排的第一种,此模式为无解模式。
所以解的概率为3/6=1/2。
结论2:
对于任何一个2行n (n>2) 列的方格,将2*n-1个编号为1到(2*n-1)的球随机填入该表格内,则必可通过移动使之表格第一行的球均与其单元格位置对应。即:
|
引论1:表格中任何一个球均可移动到表格中任何一个位置。(通过循环移动的方式即可实现)
引论2:假设编号1-k的球 (k<n)已经有序,对于任何m(m>2)行n列的表格,空格可始终移动k的后面,即k+1位置上。
证明:
由引论1,球1必定可以移到表格左上角位置,形成有1个球的有序列。
现假设球1到球k已经有序(1=<k<=n),又当k=n时,结论已得证明。所以现在证明k<n的情况:
(1) 如果球k+1出现在k球的右侧,如下图灰色所示区域:
|
(2)
则由引论1,将灰色区域所在的部分视为一个表格,即知k+1必能移到空格位置。
从而将球k+1移入到k的后面。
(2)如果球k+1出现在球1到球k的下方,如下图灰色区域所示:
|
则可先将球循环左移,知道球k+1移到如下位置:(因为空格在k+1的右方,向左循环移动时,空格向左移动,球k+1向右移动,从而必定空格会出现在球k+1的正上方)
|
将k+1上移到空格位置,再循环右移即可将球1到k+1移动其对应位置。
结论3:
对于任何一个2行n (n>2) 列的方格,将2*n-1个编号为1到(2*n-1)的球随机填入该表格内,则必可通过移动使之表格第一行的球均与其单元格位置对应。即:
|
证明: 由结论2,将上面的循环左移一下即可。
结论4:
对于任何一个2行n (n>2) 列的方格,将2*n-1个编号为1到(2*n-1)的球随机填入该表格内,则其解的概率为1/2。
证明:
第1列 第2 列 第n-2列 第n-1列 第n列
|
由结论3,可知第1列必可将球1和球n+1移入到其位置中。将右边剩下的第2列到第n列继续利用结论2,则球2和球n+2必然也可移入到其位置,如此直到第n-2列。
最后剩下的第n-1列和第n列由结论1即可证明。
四、问题解决
通过上面一系列的结论,我们终于可以得到问题的最终结论了,结论如下
对于任何m行n列的表格,将编号1到m*n(m>=2,n>=2)的球随机填入表格中,则其解的概率为1/2。
证明:
(1) 当m=2,n=2,即为结论1。
(2) 当m=2,n>2,即为结论4。
(3) 当m>2,n=2,由表格的对称性,亦即为结论4。
(4) 当m>2,n>2:
由结论2,必可先将前m-2行的球按顺序移动好,对于最后两行2,根据结论4即可证明其解的概率为1/2;
综上,结论得证。
五、计算机算法及实现(待续)
…
附录:
引论2
假设编号1-k的球 (k<n)已经有序,对于任何m(m>2)行n列的表格,空格可始终移动k的后面,即k+1位置上。
证明
|
(1) 假设空格S出现在如上图中第一排中的S位置,则只需S一直与其前面相邻的x交换位置即可,直到k的后面停止。
(2) 如果空格出现在第二排中的任意一个位置,则S只需与其相邻的数一直交换位置,直到S出现在单元格k+1位置的正下方即可,然后将k+1位置的球x与它交换即可。
(3) 如果空格出现在第m(m>2)排位置中,则可以将空格位置始终与其上排正上方的球x交换位置,直到空格出现在第二排为止,然后利用(2)即可实现。
参考文献
...