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