使用CLPFD解决CuFrog问题

时间:2012-12-09 16:40:56

标签: prolog puzzle clpfd

好的,所以我有这个叫做CuFrog的谜题,它包括填充一个3x3x3立方体,每个位置都有一个数字,但是当从一个位置移动到另一个位置时跳过一个位置。例如,考虑到扁平的立方体,第1侧(1,1)右侧的有效位置在第1侧为(3,1)。

所以我在Prolog中使用Constraints来做这个,并且我已经给出了每个变量的域(1到54),我说它们必须都是不同的,并且对于每个位置,其中一个位置在设置的右 - 左 - 下 - 必须是这个位置+ 1的当前值。

另外,我已经给出了拼图的切入点,这意味着我已将数字1放在第一个位置。

事实上,当我标记变量时,SICStus没有找到答案。 :(似乎我必须在某处错过限制或者我做错了什么。有人可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:2)

所以你说CLP(FD)没有找到解决方案。你呢 意味着它终止于" no"或者你的意思是它没有 终止?

问题看起来像Hamiltonian path问题。它 可能是搜索需要指数时间,而且简单 不会在实际时间内终止。

在这种特殊情况下,给出对称性等限制 打破启发式,实际上可以减少搜索时间! 例如,从您的起点开始,您可以修复搜索 在2个方向上,其他方向可以在以后得出。

因此,如果答案是"否",这意味着太多的限制。 如果答案是它没有终止,这意味着没有 足够的限制或不可能实际解决。

尽管你在寻找一条路径时蛮力, 后来可能会发现解决方案是系统性的。要么 你可能会自己明白这个想法。

再见