2

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

这是一个例子:

例子

图片来自这里

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

4

1 回答 1

2

网站上似乎已经有您的问题的答案。

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) 中运行,所以如果你期望非常短的打乱,那么第二种方法可能会更好。但是您可以保证第一个结果很快。

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

于 2013-06-27T03:02:33.570 回答