我正在重写我的一些图搜索算法,而且我对DFS有点困惑。看起来当使用调用堆栈作为堆栈时,返回从源到目标的路径很简单 - 只需返回仍在调用堆栈上的节点。
然而,当迭代地实现DFS时,我似乎无法弄清楚如何返回路径。我已经盯着推/弹,访问和当前的模式一段时间了,我不知道该怎么做。
我已经看到一些建议使用哈希表来存储父子关系,但是返回路径的问题肯定不需要O(N)空间。
答案 0 :(得分:0)
您只需存储当前顶点的前任。然后,您可以使用堆栈恢复路径。
伪代码:
Repeat until you are not in the first vertex:
Push to the stack current vertex;
Go to the predecessor;
Your answer will be: current vertex, stack.pop(), stack.pop(), ... (until stack not empty)
示例:
假设在DFS之后,你发现了:
pred[0] = 0;
pred[1] = 0;
pred[2] = 1;
pred[3] = 2;
并想知道从顶点0到顶点3的路径。