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

问题描述 投票:24回答:7

在Java中用于解码Rubik多维数据集的代码是一种相对简单的算法。效率也很重要,但是次要考虑因素。

java algorithm rubiks-cube
7个回答
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的详细文章。它使用的启发式特别有趣。


51
投票

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


4
投票

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

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


3
投票

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


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。他们有一些库可以帮助您可视化它并帮助您避免不必要的努力。


0
投票

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


0
投票

一种解决方案是我猜同时运行所有可能的路线。这确实听起来很愚蠢,但这是逻辑 - 超过99%的可能的争夺将在20次以下的行动中得到解决。这意味着虽然你循环了大量的可能性,但你最终还是会这样做。基本上这可以通过将您的第一步作为混乱的立方体来实现。然后,您将在第一个多维数据集中为每个可能的移动存储变量中的新多维数据集。对于这些新的立方体中的每一个,你都做同样的事情。在每次可能的移动之后检查它是否完整,如果是,那么这就是解决方案。这里为了确保你有解决方案,你需要在每个Rubiks立方体上获得额外的数据,说明为了进入那个阶段所做的动作。

© www.soinside.com 2019 - 2024. All rights reserved.