解NxNxN魔方的算法

标签 algorithm rubiks-cube

<分区>

我想为 任何 大小的魔方编写立方体求解器。

我知道如何求解大于 3x3x3 的立方体:

  • 首先我们需要解决立方体的中心(平面)场,所以它们看起来像图片。

Cube with solved centers

  • 其次,我们解决边缘问题:

Cube with solved edges

  • 最后,我们可以将整个问题简化为求解 3x3x3 立方体:

4x4x4 cube reduced into 3x3x3 cube


这听起来很简单,但问题是解决中心和边缘的方法取决于立方体的大小。对于求解中心和边缘的 3x3x3 算法,移动次数为 0,对于 4x4x4,它更长,对于 5x5x5,它甚至更长。

但是我如何计算这些 Action 呢?有什么简单的方法吗?

提前致谢!

最佳答案

您可以将这看作是群论中的一个练习,将每一种移动都视为一种排列。然后,您需要确定立方体的打乱顺序是否等于某种顺序中某些可用排列的乘积,如果是,则该顺序是什么。

事实证明,有一些算法可以解决这个问题,还有一些非常复杂的算法和实现它们的计算机包。对于包和主题,一个起点是 http://en.wikipedia.org/wiki/Computational_group_theory .

Knuth 在 http://arxiv.org/pdf/math.GR/9201304.pdf 提到了一个可实现的算法。 .我已经实现了这个版本,所以它是可行的,但是这篇论文非常密集 - 请参阅我在 Regarding approach to solving sliding tiles puzzle 上对它的引用.如果你比我了解更多的群论,你将能够阅读更密集的论文并实现更有效的算法。哦 - 如果你通读这篇论文,你应该能够首先找到问题是否可以解决,然后在理论上找到解决问题的一系列排列,但该序列可能很长。

这个特定的算法与您上面概述的方案并没有完全不同,因为它会寻找可用移动的组合,这些移动可以使一些对象被排列固定,同时将另一个对象恢复到适当的位置。

关于解NxNxN魔方的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21151342/

相关文章:

algorithm - 解决魔方的假人多维数据集

algorithm - 正在解决最佳分类为 NP 的 3x3x3 rubiks 立方体?

c++ - 摄像头和图像识别

c# - 努力制作算法来为益智游戏生成棋盘

algorithm - 稳定拓扑排序

image - 如何缩放特殊范围[0.9 1.1]内的数据?

3d - XNA 中的旋转立方体

用于排列数字列表的 Java 代码

javascript - 获取一个集中在中心的随机数