earthengine 发表于 2008-8-24 17:59:57

最少步的角块色向判断法

要判断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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br>
z &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br><br>以上很有规律:按照xyz的循环顺序,结果组对应的节点状态排在前面就是正的,在后面就是负的。现在我们可以推算角块复原的方法了。<br><br>按照以上方案组织一个证明应该不难。基本上就是应用魔方归纳法:证明如果任何一个状态按照以上方案算出的正号数量等于负号数量,那么从它进行一次基本动作之后也一样。<br>

[ 本帖最后由 earthengine 于 2008-8-24 20:29 编辑 ]

kexin_xiao 发表于 2008-8-24 18:05:15

学习一下,要仔细看!:handshake :)

Atato 发表于 2008-8-24 18:21:06

<P>楼主说的真玄乎..N阶角块...你就说判断2阶就可以了..</P>
<P>LZ把表示换了一种..</P>
<P><A href="http://bbs.mf8-china.com/viewthread.php?tid=3196&amp;highlight=%C9%AB%CF%F2">http://bbs.mf8-china.com/viewthread.php?tid=3196&amp;highlight=%C9%AB%CF%F2</A></P>
<P>色向的问题啊...邱志红老师已经说的很清楚了...上面的连接就是帖子.</P>
<P>LZ实在是应该多搜索搜索帖子..</P>
<P>&nbsp;</P>

[ 本帖最后由 Atato 于 2008-8-24 19:04 编辑 ]

魔鱼儿 发表于 2008-8-24 18:36:25

好东西要学习,不过得仔细看哦,要不看不明白的,呵呵

junior_sky 发表于 2008-8-24 19:35:43

实在不懂:L

乌木 发表于 2008-8-24 19:37:31

<P>1楼要的java图:</P>
<P>&nbsp;</P>
<APPLET height=250 codebase='http://zmb.fnfnet.com/puzzletoy/java/' archive=AnimCube.jar width=250 code=AnimCube.class>
<PARAM NAME="colorscheme" VALUE="wbgyor">
<PARAM NAME="bgcolor" VALUE="FFFFFF">
<PARAM NAME="butbgcolor" VALUE="99AACC">
<PARAM NAME="movetext" VALUE="2">
<PARAM NAME="metric" VALUE="2">
<PARAM NAME="fonttype" VALUE="0">
<PARAM NAME="move" VALUE="F D' L2 B D' B R2 D B2 L2 D F' U">
<PARAM NAME="facelets" VALUE="rrrrrrrrrooooooooowwwwwwwwwyyyyyyyyybbbbbbbbbggggggggg">
</APPLET>    <APPLET height=250 codebase='http://zmb.fnfnet.com/puzzletoy/java/' archive=AnimCube.jar width=250 code=AnimCube.class>
<PARAM NAME="colorscheme" VALUE="wbgyor">
<PARAM NAME="bgcolor" VALUE="FFFFFF">
<PARAM NAME="butbgcolor" VALUE="99AACC">
<PARAM NAME="movetext" VALUE="2">
<PARAM NAME="metric" VALUE="2">
<PARAM NAME="fonttype" VALUE="0">
<PARAM NAME="move" VALUE="R U L' U' L U' L' R U' L U R2 F2">
<PARAM NAME="facelets" VALUE="rrrrrrrrrooooooooowwwwwwwwwyyyyyyyyybbbbbbbbbggggggggg">
</APPLET>

[ 本帖最后由 乌木 于 2008-8-24 19:50 编辑 ]

earthengine 发表于 2008-8-24 20:11:09

原帖由 <i>Atato</i> 于 2008-8-24 18:21 发表 <a href="http://bbs.mf8-china.com/redirect.php?goto=findpost&amp;pid=222274&amp;ptid=13002" target="_blank"><img src="http://bbs.mf8-china.com/images/common/back.gif" alt="" border="0"></a>
楼主说的真玄乎..N阶角块...你就说判断2阶就可以了..
LZ把表示换了一种..
http://bbs.mf8-china.com/viewthread.php?tid=3196&amp;highlight=%C9%AB%CF%F2
色向的问题啊...邱志红老师已经说的很清楚了...上面的连接就是帖 ... <br>呵呵,那个我看过。不过那是用于理论论证的,且可用于角块边块面块等,不过较繁琐。我这个只能用在角块,虽然没有盲拧编码简明,但是有它的优点。几种方案应该是殊途同归的,各有千秋吧。<br>

earthengine 发表于 2008-8-24 20:11:48

原帖由 <i>乌木</i> 于 2008-8-24 19:37 发表 <a href="http://bbs.mf8-china.com/redirect.php?goto=findpost&amp;pid=222358&amp;ptid=13002" target="_blank"><img src="http://bbs.mf8-china.com/images/common/back.gif" alt="" border="0"></a>
1楼要的java图:
&nbsp;









   








<br>太感谢了!<br>

Atato 发表于 2008-8-24 20:36:42

呵呵 我倒是同意搂主 7#的说法

知Shmily足 发表于 2008-8-24 20:37:47

看不见JAVA的图啊:L
页: [1] 2 3
查看完整版本: 最少步的角块色向判断法