我必须通过迭代深化算法解决“高峰时间拼图”。我已经在stackoverflow和互联网上阅读了很多主题。我认为我理解迭代深化算法。基本上你只是深入到树中并尝试找到解决方案。
我认为我需要从拼图中创建一个图形或一个树,但我真的不知道如何。另外,如果我有树,那么我怎么知道某些东西是有效的移动还是最终的状态?
有些答案表明节点应该可以移动,边缘位于可以一次移动的节点之间。我可以想象这一点,但不知何故,我遇到麻烦,看看这有用或更好,但这怎么能解决问题。
请帮助我,我不是要求完整的解决方案或代码示例,我只需要对问题进行一些简单的解释。
答案 0 :(得分:1)
您需要使用深化算法。想象一下,您为每辆车A,B,C,D命名...树的根节点是初始板状态。现在,移动汽车A.您沿着树中的一个节点向下移动。将车A移回。你处于初始状态,但你做了两个动作来到这里,所以你是树下的两个节点。一遍又一遍地重复。你永远不会达到最终状态。
树的根节点是初始板状态。给定该节点,为每个可能的有效移动添加子节点。因此,每个子节点将是一次移动后初始树的样子。现在,对于每个子节点,执行相同的操作:创建一个子节点,其中每个节点都离开原始子节点。
最终,您将找到解决方案。发生这种情况时,将打印从根节点到解决方案子节点的移动并退出。此算法可确保您找到移动次数最少的解决方案。