Block Puzzle解决C ++算法

时间:2013-02-22 20:58:41

标签: c++ performance algorithm dynamic backtracking

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

我把所有东西都表示为矩阵 - 片段必须适合的大矩阵全部为0,开头时,如果空间已满,则片段为1,如果空间为空则为0。 现在,下一个可能更有效的想法是在进入下一个之前始终验证一条线是否完整。我的意思是我可能有一个代表作为
的作品 0 1 0
1 1 1
0 1 0
(一个十字架)。如果将十字架放在一个角落,程序将无用地执行整个回溯以获得无效的解决方案,因此它应该返回并尝试另一块。

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

1 个答案:

答案 0 :(得分:2)

将问题视为图:节点是可以排列块的各种状态,边是从一个节点到另一个节点的可能移动。然后解是从当前位置到目标的最短距离,可以使用Dijkstra算法计算。