【问题标题】:How can I determine optimally if an edge is correctly oriented on the Rubik's cube?如果边缘在魔方上的方向正确,我如何才能确定最佳?
【发布时间】:2013-06-27 20:19:25
【问题描述】:

如果一条边只能通过旋转右、左、上和下面来解决,则认为它的方向正确。如果解决边缘需要转动正面或背面,则被认为是方向错误或“不好”。不允许旋转立方体,使正面和背面变成不同的面。

这是一个例子:

图片来自here

This 网站详细介绍了一种人类确定边缘方向的演绎方式。我想知道是否有更优化的方法可以从程序中完成(另外,加扰立方体所采取的步骤是已知的)。

【问题讨论】:

    标签: algorithm language-agnostic rubiks-cube


    【解决方案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) 中运行,因此如果您期望打乱非常短,则第二种方法可能会更好。但你可以保证第一个快速的结果。

    我会提供伪代码,但我认为这些算法不是很复杂,而且我不确定如何存储数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2018-05-06
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多