最近在写一个小个拼图的小游戏,数字顺序是随机打乱的,最后却发现,拼图有时能成功,有时就成功不了,今天上网找了下,还真有研究这个的。原来,随机打乱的拼图有可能是无解的,只有偶排列才能操作成功!
下面有一神贴,数字拼图解的可行性分析!http://bbs.youkuaiyun.com/topics/270037619
下面是转载的文档
http://wenku.baidu.com/view/c05f0d155f0e7cd184253655.html
很多人玩过拼图游戏,相信大家对它都不会陌生。本文详细讨论并严格证明了拼
图游戏的可能性,包括可能情况和不可能情况。文中用到了排列的奇偶性知识,相关
知识可参阅有关的“线性代数”的书籍。
本文先介绍一下拼图游戏,然后对它做数学定义,而后分析可能性,再证明不可
能情况和可能情况。文中所提到的数均指自然数。
一:拼图游戏介绍:
一种较简单的3*3数字拼图:在一块3*3共九个方格内随机地填入1~8这八
个数字,另外剩下一个空格,空格的上、下、左、右的数字可以移到空格中,
同时产生一个新的空格。游戏过程就是不断地重复这样的过程,最后的目标
是:通过这种移动,最终使所有的数字均位于目标位置上。
将上述游戏拓展,方格内的数字可换成字母、图形等;方格的数目可扩展
到m*n(m,n>=2),甚至扩展到三维空间来。本方论证包括二维和三维的情况。
二:拼图的数学定义:
在m*n*p(m,n>2,p>=1)的方块区域里,所有的方格两两不同,其中有一个特
殊的方格,称为空穴,任何与之有邻面(二维时只须有邻边)的方块均可与之互
换位置(一次这样的位置互换称为一次操作,也称为空穴的一次移动)。刚开始
时随机产生杂乱的排列顺序,要求经过一系列操作后形成要求的排列顺序(目标
排列)。
三:可能性分析:
按目标排列顺序将所有方格从左到右、由上向下、自前而后映射为从1到
m*n*p的自然数。这是个偶排列。
定理:
一个元素两两不同的排列经过一次元素间位置互换后奇偶性改变一
次。
可行性命题:
将空穴移到目标位置后,凡是可以通过奇(偶)数次的任意两个方格
间的位置互换而形成目标排列顺序的排列顺序 (空穴已在目标位置)是
奇(偶)排列。奇排列不能通过题中所述的操作来达到目标状态,偶排列
则可通过题述操作达到目标状态。
这里介绍一个判断排列奇偶性的方法:
从1开始到m*n*p,不在目标位置上的元素就和它的目标位置上的当
前元素交换位置并记录交换次数,否则不交换,全部完成后如果交换次
数是奇数,那么原来的排列就是奇排列,否则是偶排列。
四:不可能情况证明:
一个元素两两不同的排列经过一次元素交换后排列的奇偶性改变一次,
所以奇排列要操作成功(成为偶排列)必经过奇数次操作,一次操作就是一
次空穴的移动,然而空穴从目标位置出发,再回到目标位置不可能移动奇数
次(在某方向上有一次移动必须在其逆方向上也有对应的一次移动方能回到原
位) ,因而奇排列是不可能操作成功的。
五:可能情况证明:
要证明的命题是:任何空穴已在目标位置上的偶排列均可操作成功。由于如
果一种排列A可以转化成为另一个排列B,那么排列B也可以转化成排列A,而且
空穴的位置并不确定,因此,可以将待证明的命题转化为:任意两个空穴在同
一个位置且奇偶性相同的排列可以通过空穴移动相互转化。对于三维的情况,
由于空穴可以向相连的位置移动,假如我们把三维排列的结构看做首尾相连的
一个很大的层折叠而成的,那么很显然,如果二维的(m*p)*n可以操作成功,则
三维的m*n*p也可以成功,因而实际上只须证明了二维的情况就可以证明了三维
的情况;对于二维的情况,如果证明了偶(奇)排列的情况,那么同时就可以得
出(奇)偶排列的证明,因为最初映射时并没有特定的要求,可以假设最初映射时
把其中某两个元素的映射值互换了一下。
采用数学归纳法证明。先证明2*2成立,然后设m*n时成立并推出m*(n+1)时
也成立就可以了,因为加一的那条边可以是任意一条。
AA:
当2*2(m=n=2)时,总共只有四个元素,排列位置又上下、左右对称,因而
可以设:"4" 为空穴,只须证明偶排列的情况。不同的偶排列有以下三种:
1 2 2 3 3 1
3 4 1 4 2 4
图一图二图三
图二和图三的情况,只须空穴“4”沿逆(顺)时针转一圈,就可以转化为
第一图的情况,因而命题成立。
BB:
假设当 m=i, n=j时命题立,即:任意两个i*j的排列块,只要它们的奇偶
性相同且空穴在相同位置上,它们就可以通过操作(移动空穴)相互转化。
则
当 m=i, n=j+1时:
设排列方式如下:由于左右对称,不妨设空穴不在第一列上。
A1,1 | A1,2 A1,3 ....... A1,j | A1,j+1
A2,1 | A2,2 A2,3 ....... A2,j | A2,j+1
A3,1 | A3,2 A3,3 ....... A3,j | A3,j+1
.... | .... .... ....... .... | ......
.... | .... .... ....... .... | ......
Ai,1 | Ai,2 Ai,3 ....... Ai,j | Ai,j+1
首先证明可以将目标位置在第一列上的元素移到目标位置。先将目标位置在
第一列的元素都移到第一列上,然后再排好位置,下面证明这是可行的。
若空穴不在第一行第j列就先将之移到第一行第j列,接着在第1~j列这个块
中把要移到第一列上的元素全部移到第一列去。(这是可行的,只须构造一个
奇偶性和原来排列块一样的且所有目标位置在第一列的元素全在第一列上的排
列,这种排列至少有一个,然后应用题设即可)。然后开始在这个块里面把第
一列元素的位置调整到目标位置,这分两种情况:
一:
2*(2+1)的情况:
现在目的是把第一列的元素移到目标位置,而由于第一列只有两
个元素,因而只有两种情况,一种是目标位置,另一种是相反位置,对于相
反位置,可通过以下方法操作为目标位置:
4 # y
1 y y
" # " 表示空穴,
" y " 表示其它的某个元素。
空穴移动的方向:左、下、右、右、上、左、下、右、上、左、
左、下、右、右、上、左、下、左、上、右、右、下、左、左、上、右。至
此达到目的。
二:
除以上情况2*(2+1)外的所有情况:
这些情况下,从第二列到第j列块中除了空穴外的元素至少还有两
个,设其中某两个为X和Y。由于X和Y的位置不必确定,所以可以在 1~j列的块
中构造一个第一列元素已移到目标位置、空穴位置不变且奇偶性和当前排列块
(1~j列)一样的排列块,然后这两块满足题设i*j的情况,它们可以通过空穴移
动相互转化。
接下来,把空穴移到原始位置。观察现在的排列,因为空穴在原始位置,所
以总操作次数肯定为偶数次,因此现在的排列和初始排列、目标排列的奇偶性是
相同的;目标位置在第一列上的元素已全部在目标位置上;所以,在从第二列到
第 j列的块和目标排列的对应块的奇偶性也是一样的,所以可以在该块中应用题
设,可知可以把现在的排列转化成为目标排列,综合以上论证可知对于i* (j+1)
的情况也是成立的。
综合以上AA:和BB:的证明可知:对于任意 m* n的情况,任意两个空穴在
同一个位置且奇偶性相同的排列可以通过空穴移动相互转化。证明了二维的情况
也同时证明三维的情况成立。