魔方算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
不停的重复一个公式必然回到最开始的状态(转自小站hwt69love)看不懂的请看二楼本人写的,谢谢
1,基本步骤:每个面顺时针90度称为一个基本步骤。共6个基本步骤,一个面一个。转180度,270度,反转。都是他的组合。
2,公式:一组原子旋转的组合步骤。可以是任意次基本步骤的组合。公式所包含的基本步骤数叫做公式长度。
3,对于任何状态,都可以使用任何公式的。对于公式而言,没有哪一个状态是特殊的。4,一个公式所变换的所有状态必定产生一个环(不相交的圆圈)。
命题一:魔方任意旋转,状态数是有限的。
我来简单的说一说证明思路。不用数学公式,但是简单的提提数学概念,帮助大家掌握点数学知识。
命题:一个公式所变换的所有状态必定产生一个环。
命题一:魔方任意旋转,状态数是有限的。
证明:这个命题很关键。先用最直观的方法,对于三阶魔方有六个面,每个面有9个色块,所以共有6*9=54个色块。54个色块的每一种排列组合对应一种魔方状态(一一对应)。大家明白了什么叫状态吗?54的全排列记做54!=54*53*52*51*....*3*2*1。显然这个数目是有限的。魔方的任意旋转所产生的状态不会比这个数目大,因为我贴色块是撕下来贴的,没有限制的。小朋友复原魔方就是这么做的。呵呵!
魔方状态空间
魔方的每一个状态可以看成一个点,魔方的全部状态组成一个空间。
魔方的一个状态也可以看成图论中的一个点。使用一个公式将魔方的一个状态转换成另一个状态,可以使用一条边连接这两个状态,在边的旁边标上这个公式的符号。
请大家想象这样的一幅图。这个图上的点是有限的,并且是联通的,不然就无法转换到其中的一个状态去。并且这个图是封闭的,就是状态中的任何点经过转换还在图中,也就是图都画完了。用群论讲,就是群是封闭的。像全部整数的集合对加法封闭,也就是任何数相加都是整数。但是整数对于开根号运算就不是封闭的,2开2次方就不是一个整数,而且还不是一个有理数(就是不能表示成一个分数)。
命题二,魔方的全部状态空间对于任何公式都是封闭的
魔方的全部状态组成的空间记做H,H是封闭的。
证明一:反证法。如果H是不封闭的,那么必有H中的一个点经过公式转换后生成的点不在H中(如果不存在这个的点,说明H是封闭的,根据封闭的定义),但是H是指“全部状态的集合”,因此假设H不封闭是不成立的。所以H封闭。
证明二:构造法,上面的方法还有点不太严密,如果我们有个方法能生成一个封闭的空间H,那么我们也证明了这个命题。先设空间H为空集,首先增加一个初始点(六面全复原),经过一个公式变换,得到另外一个状态,如果这个状态不在集合H中,把它加入到集合H 中,依次类推,H集合的点数不断增加。根据命题一,H集合的点数是有限的,理论上,这个过程是可以完结的。而且我们已经知道点数不会超过54!。
所以最终H集合是封闭的,也就是不可能再增加新的点啦。
命题三:公式变换是一个一一映射(一一对应)关系
魔方中使用一个公式将一个状态转换到另外一个状态叫做一个变换F。
注意,魔方状态空间H中,一个状态点A,经过一个变换F,转换到状态B。
可以称作从A到B的一个映射,而且这个映射是一一映射。就是在公式F下,状态A只能变换到一个特定状态B,(不可能有两个状态,有时是B,有时是C)。同时在公式F下,状态B也只能由状态A变换过来,不可能从其他的状态转换过来,否则就不是一一对应啦!简单的说,在公式F(或称变换F)下,一个图H(空间H对应的图,我们就不区分了),一个图H中的点“有且只有”两条边,一个入边,一个出边(可以用有向图来描述)。
命题四、一个公式所有变换的点必定在H中画一个圈
命题四、一个公式所有变换的点必定在H中画一个圈,并且这个圈不相交。可以使用拓扑变换变换成一个圆形。
证明:构造法,设H为魔方空间全部点的集合,H…为变换经历过的全部点的集合,从H中任意一点起(设为A点),先将这一点加入H'中,使用公式F变换,得到下一个点(B),这个点要么在H‟中,要么不在,如果不在,就将变换后的点(B)加入H…中。最后会得到封闭的空间H',也就是再怎么变换,新点也出不了H'。现在需要证明H'中的全部点加上变换路径形成一个圆圈。由于变换可以无限下去,但是空间H'是有限的,所以必定会形成一个死循环,即一个圈。有没有可能形成一个6字行的图案,还有8字形的图案呢?这是一个重大问题,
但是根据刚才讨论的变换所具有的一一对应,一一映射的性质,除了圆圈外,其他的图案无法形成,这个很直观。
一一对应的图论的解释是,任何点都有两个边,一个入边,一个出边。又要希望形成循环,只有圆圈这样简单的图样了。6,8,9以及更复杂的图样中,必定有一个点有2个以上的边。构造法解释:H‟从空集开始构造,首先加入一个原点A,这时对应的图是一个点A,经过一个变换F,如果变换后的点B不在集合H'中,加入点B,这时候后“图”是一个AB线段,再加入一个新点,“图”是ABC组成的线(不相交,可以拉直成直线),任何加入的新点只是延长了线的长度而已。最后图必须封闭,为了满足一一映射的要求,最后一次F变换必定变换到起点A上。如果变换到其他点上,如D点上,那么F的逆变换就有两个,一个逆变换到最后一点,一个逆变换到C点(D的前一点),这与变换的性质不符合。如果还不明白,请复习一一对应,变换,逆变换(一个公式只有一个反向变换公式)。
总结:现在比较圆满的证明了一个公式可以在魔方状态空间H中形成一个圈需要注意两点:一个是魔方状态空间H是有限的,一个是变换是一一映射的性质。
#include
#include
#include
#include
int a[3][3]={1,1,1,1,1,1,1,1,1};
int b[3][3]={2,2,2,2,2,2,2,2,2};