魔方算法(zhuan)_自由的风

来源:百度文库 编辑:神马文学网 时间:2024/04/28 21:41:55
魔方玩法技巧的网页有好多了,但是好像我自己非常想做一个,总觉得自己做的会和别人的不一样吧,也许会做出一点自己的特色吧,总之,我觉得只要认真的做一件事,总是会有很好的心得。我从小家里就有一个魔方,可是我从来就没玩出过一面,几个月前,我偶尔看到了一个外国网页,突然一下我才知道玩出六面魔方原来这么简单,我平时也没有时间,主要就是在公车上、地铁上那些时间玩,我发现这是件很cool的事情,你会从自己身上发现很多惊羡的目光的:)慢慢我也学会了其他的魔方技巧和魔方解法,除此之外,我还对魔方的道理很感兴趣,计划写出一个程序,给出任意魔方的解法,当然那不是基于这些人类的魔方技巧,据说计算机的解平均20步就可以了。希望同样有兴趣的朋友多和我交流,网页下面就可以给我写信。希望大家都能在魔方中找到乐趣!
魔方别看只有26个小方块,变化可真是不少,魔方总的变化数为

或者约等于4.3·1019。如果你一秒可以转3下魔方,不计重复,你也需要转4542亿年,才可以转出魔方所有的变化。
三阶魔方总变化数的道理是这样:六个中心块定好朝向后,就构成了一个坐标系,在这个坐标系里,8个角色块全排列8!,而每个角色块又有3种朝向,所以是8!*38,12个棱色块全排列每个有2种朝向是12!*212,这样相乘就是分子,而分母上3*2*2的意义是,保持其他色块不动,不可以单独改变一个角色块朝向,改变一个棱色块朝向,和单独交换一对棱色块或一对角色块的位置。 至于为什么,我建议大家自己先想想,我初步写了一些,你可以到这里看看。
 
由此可见啊,这么多变化用很短时间变回六面同色不是很简单啊。不过听说世界上最快的人10.36秒就可以还原一个魔方(记录创造于2007年2月24-25日的比利时公开赛),记录保持者是来自法国的Edouard Chambon。
其实如果学会方法,你也可以的。那些人为什么会这么快呢?因为他能记住好多的算法,或者也有叫公式的,说白了,就是左拧拧右拧拧的一套组合动作,从而把一个特定的块移到你想要的位置,或者得到你想要的某种形态。世界上顶尖的选手,据说可以记住600多个算法。我们这里介绍的是入门魔方解法,所谓入门就是算法越少越好,因为说实话,如果不是天天玩,算法挺容易忘的,这个入门魔方教程,涉及的算法就很少,而且都很简单, 六面还原的全过程基本上很容易记得。
在开始之前,我还要啰嗦一下魔方的结构,怕有的朋友不熟悉,魔方六面的中心块的相对位置是固定的,这个你拆过魔方就会知道,我敢保证在你照后面的方法开始拧来拧去的时候,很容易就忘记前后左右开始是什么颜色,这样就拧乱了,所以你开始一定要定好一个你喜欢的朝向。在这里我选蓝色做为顶面,绿色为底面,红色前面,橙色后面,白色左面,黄色右面。 当然你可能贴纸贴的就跟我不一样,魔方六面贴纸应该有5*3!=30种贴法吧,为啥呢?因为假如你指定蓝面为顶面,那么底面就应该有5种选择,还剩下4面构成一个环,这个环去除了旋转对称共有3!种贴法,对吧:)我选的如下图。
第一次打开动画会稍慢,后面的动画就会几乎瞬间打开了。
点击这个上面的按钮会出来一个窗口,这个3D图形是用java applet做的。如果你想要它的源码可以到这里看看,感谢Werner Randelshofer的卓越工作。这个动画使用起来很简单方便。
 

关于播放动画的Java Applet:如果你的机器没有安装Java运行环境(Java Runtime Environment),通常你的浏览器会提示你安装,如果出于某种原因,他没有提示(Firefox一般不会),只是在图形位置显示了一个X,那你就需要自己动手从这里下载一下了:Java Runtime Environment(简体中文版),或者here (English Version),或者这里(繁体中文版)。 如果以上链接太慢,您可以试试新浪下载,太平洋下载,硅谷动力下载。
如果你想改变后面所有动画里六面的颜色,可以在这里设置。
请从这里选择一种颜色
然后点击下面的小方块分配颜色

左 前 右 后

最后
好像预备的文字太多了,大家看得很乏味了吧,下面我们开始讲怎样玩魔方吧。
(第一步)在第一面做一个十字,形成如下的样子:
 
注意啊,每个侧面的棱和中心是同色的。做成这步的方法很多,我建议你自由发挥。如果实在有困难,我这里提供一个万全的办法,就是把蓝色棱色块变到底面上去,然后对好侧面颜色,再翻上来。我这里就举一个例子大家就应该明白了,对于左图B位置,我们当然一步就可以变到底面,但是有时候这影响了已经对好的红色面,你在对好侧面,把蓝黄棱色块从底面翻上来之前需要恢复红色面的位置。具体操作见下。
FDF'

R2180°
动画会自动播放,你也可以用播放条右边的按钮一步一步看。
我说的够清楚了吧。而对于A和C位置你可以旋转该面,让其变到B或D位置。

照上面说的,你应该就可以做好十字啦。这里我给初学者建议一种更清晰的方法,我们的蓝色棱变到底面之后,可以不急着把它翻上去,可以变成左图这个样子,注意在底面上4个棱可以是任意顺序,这会给你减少很大难度,最后把他们逐一对好侧面颜色翻上去 就行啦。按照这种方法后面步骤的动画:
下面我要说说标记。你没准注意到上个表格里的一些奇怪的字母,那些字母的意思很简单,
F = front face 前面 B = back face 后面 R = right face 右面
L = left face 左面 U = up face 上面 D = down face 下面
以上面的表里的标记为例,F就代表前面顺时针转90°,F'代表前面逆时针转90°,R2代表右面转180°,就这么简单,大家明白了吧。
另外,如果你的魔方是有数字的魔方,或者带图形、带图案的魔方,那么你六面中心块就有了朝向的问题,你可以参考这一页在此步对好侧面中心块。
(第二步)对好第一面,加上四侧面的T字型,形成:

做好这一步其实你只要学会一招就够了。那个蓝色的角色块,转来转去之后就6种位置,

对于A位置,只需下面3步,
FDF'

而对于B位置,其实完全一样,就是把刚才的3步对于顶面对角线做一个镜像,变成 R'D'R。
如左图,对于顶面对角线做一个镜像,我们将在后面无数次的遇到,所以请大家一定注意这个镜像的意义。
(此动画设为不自动播放,请按播放键开始)
而对于C,D,E,F位置,你总可以用旋转侧面和底面将其转到A或B位置。这里是个例子:
 
这样第二步就完成了,我们已经打好了地基,简单吧。
(第三步)放第二层的棱色块,变成形如

咋变呢?还是一个算法,加上他的对角线镜像,就搞定了。这次我们把魔方要翻过来了,蓝面朝下,绿面朝上,其他面也相应调整。
下面就是这个算法,我们要把顶面上的红白色块变到表里最后一个图所示的位置
URU'R'

U'F'UF


 
整个算法是URU'R' + U'F'UF,是不是很有规律?我们看,好像后一半U'F'UF正好是 前一半URU'R'的对角线镜像吧,是吧?我们看前四步URU'R'的作用是把左图里我们要的两个 小块组合起来,上表中标为红色的第5图显示了组合好的两个色块,而后四步U'F'UF则是把我们组合好的两个小块填近正确的位置。
所以,如果我们遇见,

该怎么办呢?答案就在上一段里面,我们的算法就是上面算法的对角线镜像,也就是前半后半颠倒过来,成为U'F'UF + URU'R'
U'F'UF

URU'R'

会有一些情况下,你需要的棱色块不在顶面,而在第二层的错误位置或者朝向,这时咋办?首先,你要先做在顶面上的那些, 可能不听话的棱色块会自己变到顶面上,如果最后他还是不听话,如左图,我们就用上面算法把个无关大局的棱色块搞到该位置,我们要的那个红白棱色块就自然换到顶层了,这稍微有点麻烦,不过对于我们初等解法只能这样先忍忍了,这也可能会激发大家去学高级的解法吧:)
除此之外,你还可以试试这个算法F' U2 L' U L U2 F。和上面的算法起同样的作用。注意,开始状态不太一样。
和他的对角线镜像:R U2 B U' B' U2 R'
至此,第三步也讲完了,好像我们到现在为止一共就学了2个算法吧,所以大家要加油啊。
我要换页了,不然这页可能打开就太慢了。