2013-03-19 48 views
0

我必须通过迭代加深算法解决“高峰时间难题”。我在这里阅读了很多关于stackoverflow和互联网的话题。我认为我理解迭代加深算法。基本上你只是深入树中并尝试找到解决方案。高峰时间 - 迭代深化

我想我需要从这个谜题中创建一个图或树,但我真的不知道如何。另外,如果我有树,那么如何判断某个事物是有效的还是最终的状态呢?

有答案,节点应该是可能的移动和边缘之间的节点,可以在一个步骤中到达。我可以想象得到这一点,但不知何故,我发现这可能是有用的或更好的,但如何解决这个问题。

请帮助我,我不是要求完整的解决方案或代码示例,我只是需要一些简单的问题解释。

回答

1

有一个原因需要使用深化算法。想象一下,你为每辆车命名A,B,C,D ......你树的根节点是最初的棋盘状态。现在,移动汽车A.你沿着树中的一个节点走下去。将汽车A移回。你处于初始状态,但你做了两个动作来到这里,所以你是树下的两个节点。重复一遍又一遍。你永远不会达到最终状态。

树的根节点是初始板状态。给定该节点,为每个可能的有效移动添加一个子节点。因此,每个子节点将是初始树在移动后的样子。现在,对于每个子节点,执行同样的操作:创建一个子节点,其中每个节点都是一个移出原始子节点的节点。

最终,你将遇到一个解决方案。发生这种情况时,您将从根节点打印到解决方案子节点并退出。该算法可确保您找到移动次数最少的解决方案。

+0

谢谢,所以节点实际上代表整个董事会?这对我来说很有意义。然而,这非常耗费内存,还有其他方法吗? – Jan 2013-03-19 16:43:54

+0

有两种方法。方法1:每个节点都是一个完整的板子(当然,你会把它变成一个对象)。方法2:每个节点都是一个动作。要查看节点上电路板的状态,您必须从初始电路板开始,然后通过树来到您正在检查的节点,因为您所有的都是移动。一个需要更多的记忆。一个需要更多的处理时间。你想要做什么? – kainaw 2013-03-19 16:47:20

+0

我想我会带更多的记忆。移动方法似乎有点复杂 – Jan 2013-03-19 18:27:04