我尝试在此图表上应用IDDFS,首先以树形式进行,结果如下:
At level 1: d,e,p
At level 2: d,b,e,c,e,h,r,p,q
At level 3: d,b,a,e,h,c,a,e,h,q,p,r,f,p,q
At level 4: d,b,a,e,h,p,q,c,a,e,h,q,p,q,r,f,c,GOAL
我对路径中重复的节点感到困惑,我们可以消除它们还是会出现在最终路径中?
这是遍历图表以达到目标的正确方法吗?以及我们如何知道下一个要访问的节点(例如在树中我们从左到右)。
如果我们在同一个图上应用DFS和BFS,会有什么路径?
DFS结果和IDDFS会有什么不同吗?它看起来很相似
答案 0 :(得分:1)
是的,通过跟踪您已经访问过的节点,您可以并且应该在实施DFS时摆脱重复的节点。如果不这样做,则代码在找到循环时不会终止。不要忘记清除每个新级别的访问节点集。因此,请忽略列表中的受访节点,除非包含正在考虑但未重新访问的节点非常重要。
如果你写出BFS和DFS的扩展,你会发现IDDFS开始看起来像BFS,并且越多越像DFS看起来越多你的水平。当level =最长路径长度时,你会得到DFS,这并不奇怪,因为IDDFS 是 DFS,只有路径在给定数量时切断;在这种特殊情况下,这个数字没有效果,因为没有足够长的路径可以被切断。
图表中的顺序没有明确定义。您自己选择一个或另一个订单。如果随机选择下一个节点,则会得到非确定性算法。如果你选择它们,不按字母顺序排列,那么你会得到一些决定论。有时区别并不重要,但确定性对于调试代码等是有好处的。现在,当你进行这个练习时,你会看到模式,所以最好不要随意。
你的问题确实看起来像家庭作业。 ;)