块拼图的C++算法

Block Puzzle solving C++ algorithm

本文关键字:算法 C++ 拼图      更新时间:2023-10-16

我想制作一个解决区块谜题的算法,但要尽可能高效。我已经做了简单的方法(回溯)。

我把所有的东西都表示为矩阵——在开始的时候,块必须适应的大矩阵都在0上,如果空间是满的,块是带1的矩阵,或者如果空间是空的,块为0的矩阵。现在,下一个可能更有效的想法是,在进入下一行之前,始终验证一行是否完整。我的意思是,我可能有一个作品被表示为
0 1 0
1 1 1
0 1 0
(十字架)。如果十字架被放在角落里,程序将对无效的解决方案进行整个回溯,因此它应该返回并尝试另一块。

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

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