2013-06-25 68 views
1

如果僅通過旋轉右側,左側,上下面來解決邊緣問題,則認爲它的方向是正確的。如果解決邊緣問題需要轉動前面或後面,則認爲它是錯誤的或「不良」的。旋轉立方體,使正面和背面變得不同,不允許。如何以最佳方式確定邊緣是否在魔方正確定位?

下面是一個例子:

example

圖片來自here

This網站詳細介紹了人類確定邊緣方向的演繹方式。我想知道是否有一個更優化的方式來從程序中做到這一點(另外,爭奪立方體的步驟也是已知的)。

回答

1

似乎有一個答案,您的問題已經在網站上。

Look at the U/D faces. If you see: 

    - L/R colour (orange/red) it's bad. 
    - F/B colour means you need to look round the side of the edge. If the side is U/D (white/yellow) it is bad. 


Then look at the F/B faces of the E-slice (middle layer). The same rules apply. If you see: 

    - L/R colour (orange/red) it's bad. 
    - F/B colour (green/blue) means you need to look round the side of the edge. If the side is U/D (white/yellow) it is bad. 

所以它只是通過U上的顏色循環的問題/ d/F/B面(或者你可以在一個邊緣的基礎上做的),如果其中任何一個打破你知道規則那邊緣不好。這種方式只能看到每一個邊緣,所以我會說這很有效率。這忽略了知道爭奪算法。

只需使用擾碼算法來確定邊緣方向就會困難得多,因爲您必須在轉彎中觀察模式,並且如果爭奪時間足夠長,則可能會比上面解釋的花費更多的時間。但爲了完整起見,我會舉一個簡單的例子說明如何完成。

  • 從所有邊的狀態開始,它們位於哪裏(只有12個位置,因此數目相應)。或者,如果你對僅有的一首曲目感興趣。
  • 然後迭代地遍歷列表
    • 任何時候一個F/B轉動奇數次翻轉無論哪個面轉動的邊上的方向。

這可能向後當您移動回完整性在邊緣聲稱自己是「方向錯誤」結束運行跟蹤邊緣的狀態,如果你就會知道它實際上是相反你開始的狀態(因爲解決的立方體具有全部的邊)。

然而這在O(n)中運行,其中n是爭奪的長度,並且第一個運行在O(1)中,所以如果你期望非常短的爭奪,那麼第二種方法可能會更好。但你保證第一個結果快速結果。

我會提供僞代碼,但我不認爲這些算法是非常複雜的,我不知道如何存儲數據。

相關問題