答案 0 :(得分:1)
如果您想要所有解决方案,那么回溯绝对是您的选择。 BFS / A * / Dijkstra和其他人可能会工作(需要证明它),但无论哪种方式,他们很可能都不会给你所有的解决方案。
回溯不应该花太长时间,因为可玩区域非常小而且你的棋子和动作数量相对较少,这样可以获得良好的启发式。
答案 1 :(得分:1)
为了避免搜索每个可到达的位置,您需要一种快速确定某个位置是否无法解决的方法。您将无法快速排除所有无法解决的职位,但您可以排除其中许多职位。
要检查的是每个模具D,并且对于每个孔H,模具D是否可能到达孔H.即使这不容易弄清楚。作为一个保守的界限,你可以将所有骰子上剩下的数字相加,假设D剩下那么多的移动(因为这些运动中的每一个理论上都可以推动D),并且看看D是否可以达到H.作为稍微不那么保守绑定,您可以将所有多余的移动分配给E最接近能够推动D的那个,然后看看D(有E的帮助)是否可以达到H.
一旦你确定哪个骰子仍然能够到达哪个洞,如果有一个无法到达任何洞的骰子,或者任何骰子无法到达的洞,那么这个位置是无法解决的。类似地,如果有N个骰子无法到达N个不同的洞,或者H个洞不能被N个不同的骰子到达,那么这个位置是无法解决的。
这种启发式方法不能完全解决您的问题,但它可能会使搜索空间对某些范围的电路板更易于管理。