1

我想制作一个算法来解决Block Puzzles,但尽可能高效。我已经做了简单的方法(回溯)。

我将所有内容都表示为矩阵 - 碎片必须适合的大矩阵在开始时全部为 0,如果空间已满,则碎片为 1,如果空间为空,则为 0。现在,下一个可能更有效的想法是在转到下一行之前始终验证一行是否完整。我的意思是我可能有一块表示为 (十字架)。如果十字架被放在角落里,程序将无用地为无效的解决方案进行整个回溯,因此它应该返回并尝试另一件。
0 1 0
1 1 1
0 1 0

如果有必要,我可以提供一段代码,正如我所说,我只做了简单的低效回溯。
有没有人有更好的想法?在这种情况下可以使用动态规划吗?

4

1 回答 1

2

把问题想象成一个图:节点是可以排列块的各种状态,边是从一个节点到另一个节点的可能移动。那么解就是当前位置到目标的最短距离,可以使用 Dijkstra 算法计算。

于 2013-02-22T21:31:14.360 回答