如果一条边可以通过仅旋转右、左、上和下面来解决,则认为它的方向正确。如果解决边缘需要转动正面或背面,则被认为是方向错误或“坏”。不允许旋转立方体,使正面和背面变成不同的面。
这是一个例子:
图片来自这里
该站点详细介绍了人类确定边缘方向的演绎方式。我想知道是否有更优化的方法可以从程序中完成(另外,扰乱立方体所采取的步骤是已知的)。
网站上似乎已经有您的问题的答案。
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 面上的颜色的问题(或者你可以在单个边缘的基础上做),如果它们中的任何一个违反规则,你就知道边缘是坏的。这种方式只查看每个边缘一次,所以我会说它相当有效。但是,这忽略了对加扰算法的了解。
简单地使用打乱算法来确定边缘方向会困难得多,因为您必须注意转弯中的模式,如果打乱时间足够长,这最终可能需要比上面解释的更多时间。但为了完整起见,我将举一个简短的例子来说明它是如何完成的。
当您将边缘移回完整性时,可以向后运行以跟踪边缘的状态,如果最终您的边缘声称“方向错误”,您会知道它实际上与您开始时的状态相反(因为已解决的立方体的所有边都面向)。
然而,这在 O(n) 中运行,其中 n 是打乱的长度,并且第一次在 O(1) 中运行,所以如果你期望非常短的打乱,那么第二种方法可能会更好。但是您可以保证第一个结果很快。
我会提供伪代码,但我不认为这些算法非常复杂,而且我不确定如何存储数据。