最容易为Rubik的立方体编码算法?

时间:2009-08-30 21:30:22

标签: java algorithm rubiks-cube

使用Java编写解决Rubik多维数据集的相对简单的算法。效率也很重要,但是次要考虑。

7 个答案:

答案 0 :(得分:51)

执行随机操作,直到获得正确的解决方案。最简单的算法,效率最低。

答案 1 :(得分:12)

我发现的最简单的非平凡算法是这样的:

http://www.chessandpoker.com/rubiks-cube-solution.html

编码看起来并不太难。 Yannick M.'s answer中提到的链接看起来也不错,但“the cross”步骤的解决方案看起来可能对我来说有点复杂。

您可能希望了解一些开源解算器实现。这是一个Python implementation。此Java applet还包含解算器,源代码可用。还有一个Javascript solver,也有可下载的源代码。

Anthony Gatlin's answer对于Prolog在这项任务中的适应性提出了一个很好的观点。这是一篇关于如何编写自己的Prolog solver的详细文章。它使用的启发式特别有趣。

答案 2 :(得分:4)

可能想看看:http://peter.stillhq.com/jasmine/rubikscubesolution.html

具有解决3x3x3魔方的算法的图形表示

答案 3 :(得分:3)

我理解你的问题与Java有关,但实际上,像Prolog这样的语言更适合像解决魔方的问题。我认为这可能是一个课程,你可能没有选择工具的余地。

答案 4 :(得分:0)

你可以通过BFS(广度优先搜索)来做到这一点。我认为实现并不那么难(它是图中类别下最简单的算法之一)。通过使用名为queue的数据结构,你真正要做的就是构建一个BFS树,并找到从给定条件到所需条件的所谓最短路径。这种算法的缺点是它不够有效(没有任何修改,即使求解2x2x2立方体所需的时间约为5分钟)。但你总能找到一些提高速度的技巧。

说实话,这是该课程的作业之一,名为" Introduction of Algorithm"来自麻省理工学院这是家庭作业的链接:http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/assignments/MIT6_006F11_ps6.pdf。他们有一些库可以帮助您可视化它并帮助您避免不必要的努力。

答案 5 :(得分:0)

供您参考,您当然可以看看这个java实现。 - > Uses two phase algorithm to solve rubik's cube。并且已经尝试过这个代码并且它也能正常工作。

答案 6 :(得分:0)

一种解决方案是我想同时运行所有可能的路线。听起来确实很愚蠢,但这是逻辑-不到20次移动,就可以解决超过99%的争夺。这意味着,尽管您循环了很多可能性,但最终还是要这样做。从本质上讲,这可以通过将您的第一步作为加扰多维数据集而起作用。然后,对于第一个多维数据集上的每个可能移动,您将在变量中存储新的多维数据集。对于每个这些新多维数据集,您都执行相同的操作。在每个可能的移动之后,检查它是否完整,如果是,那么这就是解决方案。在这里,要确保您有解决方案,您将需要在每个Rubiks多维数据集上额外记录一些数据,以说明达到该阶段所要做的动作。