【发布时间】:2013-02-22 20:58:40
【问题描述】:
我想制定一个算法来解决Block Puzzles,但要尽可能高效。我已经做了简单的方法(回溯)。
我将所有内容都表示为矩阵 - 块必须适合的大矩阵在开始时全部为 0,如果空间已满,则块为 1,如果空间为空,则为 0。
现在,下一个可能更有效的想法是在转到下一行之前始终验证一行是否完整。我的意思是我可能有一个表示为0 1 0
(穿过)。如果十字架被放在角落里,程序将无用地为无效的解决方案进行整个回溯,因此它应该返回并尝试另一件。
1 1 1
0 1 0
如果有必要,我可以提供一段代码,正如我所说,我只做了简单的低效回溯。
有没有人有更好的想法?在这种情况下可以使用动态规划吗?
【问题讨论】:
-
也许,当一个棋子被放置时,你计算与放置的棋子中任何零相连的零的数量,如果这个数字小于最小的未放置棋子中 1 的数量,那么你知道放置的棋子错了吗?
-
请给我更多细节。最大尺寸是多少,..limits?
-
不是真正的问题,只是想尝试一下。假设限制是 [INT_MAX/2][INT_MAX/2] 的矩阵,因此最大件数是 INT_MAX。与问题无关:)
标签: c++ performance algorithm dynamic backtracking