我在这个问题上花了很多时间。但是,我只能找到针对树的非递归方法的解决方案:对于树是非递归的,对于图是递归的方法,对于graph是递归的。
许多教程(我在这里不提供那些链接)也没有提供方法。否则该教程是完全不正确的。请帮我。
更新:
很难描述:
如果我有一个无向图:
1 / | \ 4 | 2 3 /
1– 2-3 –1 是一个循环。
在步骤:“将弹出的顶点的邻居推入堆栈”中,应按什么顺序推顶点?
如果按下的顺序是2,4,3,在堆栈中的顶点是:
2
4
3
| | |3| |4| |2| _
弹出节点后,我们得到结果:1 -> 3 -> 4 -> 2而不是1--> 3 --> 2 -->4。
1 -> 3 -> 4 -> 2
1--> 3 --> 2 -->4
不对 我应该添加什么条件来停止这种情况?
没有递归的DFS与BFS基本上相同- 但使用堆栈而不是队列作为数据结构。
线程迭代DFS与递归DFS以及不同元素对这两种方法的句柄以及它们之间的区别进行排序(而且!您将不会以相同的顺序遍历节点!)
迭代方法的算法基本上是:
DFS(source): s <- new stack visited <- {} // empty set s.push(source) while (s is not empty): current <- s.pop() if (current is in visited): continue visited.add(current) // do something with current for each node v such that (current,v) is an edge: s.push(v)