- 最后登录
- 2009-2-22
- 在线时间
- 123 小时
- 阅读权限
- 20
- 注册时间
- 2008-8-17
- 积分
- 273
- 帖子
- 224
- 精华
- 0
- UID
- 40201
- 性别
- 保密
- 积分
- 273
- 帖子
- 224
- 精华
- 0
- UID
- 40201
- 性别
- 保密
|
要判断N阶魔方角块方向,盲拧编码法为我们提供了基本依据。但是,盲拧编码法需要确定3个面的坐标,确定高中低级面。这样,同一个魔方在不同的参照系下将会有不同的编码结果,也就有不同的解法。当然,其中会有一些简单些,有些复杂些。对于最少步的判断,这一区别是关键性的。所以,本文旨在提出一种不同的方法,确保能使结果与参照系无关。<br><br>首先,我们要明白的一点是,魔方的每个角块其实可以处于6种不同的方向状态,而不是3种。但是,在每一个特定的位置,确实只能处于其中的3种。这是因为8个角块可以被分成2组,组内的块必须通过偶数次转动90度才能达到, 而要移到别的组则需要奇数次。这两个组各有4块,通过各面的对角线分别构成一个正四面体。如果我们每次都转动180度,那么两个组的块就不能互换。如果我们观察特定的角块,可以把它所在的块组称为偶组,另一个组叫奇组。<br><br>其次,让我们看看偶组和奇组的方向状态有何不同。如果你对盲拧编码很熟练,不难观察到:<br><br>如果一个块的原始位置在偶组上,那么它的编码在各种高中低面选择下要么都为0,要么都不是0。下面简称这种块为偶块。<br>如果一个块的原始位置在奇组上,那么它的编码在不同参照选择下可以有各种不同的值,且总有一些参照选择能让它为0,另一些则不。这种块就是奇块。<br><br>对于偶块,我们在对角轴向外的方向观察,则它要么顺时针转120度(用+表示),要么逆时针转120度(用-表示),要么就已经在正确位置。这里我们采用类似盲拧的方法,把相对面的颜色看作相同。<br><br>对于奇块,我用xyz进行编码。如果X向(LR)选为高级面它的编码为0,它的状态为x,余类推。<br><br>好了,编码完成之后,我们要组织复原策略了。对于偶块,它们的状态不会变化,可不加以考虑。而容易证明奇块的数目总会是偶数且总是两个组各占一半,因此我们把奇块成对进行考虑。且总是一个在奇组,一个在偶组。<br><br>这两个成对的角块要么编码相同,要么不同。要是相同,它们可以消去。因此,我们只需要考虑它们不同的情形,这可以用实例说明。<br>首先考虑3阶公式F D' L2 B D' B R2 D B2 L2 D F' U(希望谁能帮我做个JAVA),这个公式把2个角块(ULF和URF)调换,把一个角块(DLF)翻转。它们都在同一个面上。因为单单调换一对角块是做不到的,这个公式会把一对边块(UF和DF)调换以达成平衡。按照我的编码,它们的状态分别表示为<br><br>ULF:x<br>URF:y<br>DLF:+<br><br>这里的DLF是跟URF同组的。这个公式说明xy的组合相当于y所在组上一个-。<br>现在考虑另一个公式R U L' U' L U' L' R U' L U R2 F2,它和以上公式的结果非常相像,但它翻转了DRF而非DLF。这时候它们的状态是<br><br>ULF:x<br>
URF:y<br>
DRF:-<br><br>xy组合的结果现在相当于x所在组上的一个+。看到没有?只要把结果所在的组改变,结果就从-变成了+。<br><br>下面可以列出一个表了,大家可以自行验证一下。<br><br>节点1 节点2 节点1所在组 节点2所在组<br>x y + -<br>y z + -<br>
z y + -<br><br>以上很有规律:按照xyz的循环顺序,结果组对应的节点状态排在前面就是正的,在后面就是负的。现在我们可以推算角块复原的方法了。<br><br>按照以上方案组织一个证明应该不难。基本上就是应用魔方归纳法:证明如果任何一个状态按照以上方案算出的正号数量等于负号数量,那么从它进行一次基本动作之后也一样。<br>
[ 本帖最后由 earthengine 于 2008-8-24 20:29 编辑 ] |
|