在DFS树及其后边缘中查找从起始节点到其他节点的最小距离

时间:2016-12-08 21:37:31

标签: graph-algorithm tree-traversal

问题在于:

  1. 查找DFS并计算从起始节点到另一个节点的距离 图中的节点,为每个节点分配v与起始节点的距离

  2. 接下来找到每个节点v的min与前面找到的距离以及一些后缘的距离连接v的后代u与w

  3. 做第一部分很简单,首先只需在DFS上运行BFS。

    第二部分似乎更难。找到后缘距离的最佳方法是什么?

    即使计算DFS,这个问题是否可以在O(n + m)中完成?

1 个答案:

答案 0 :(得分:1)

  1. 要查找与源节点的距离,您需要从起始节点运行BFS,您将获得节点的距离(v,使得v可以从s到达)。无需针对此问题运行DFS。
  2. 这个问题对我来说并不清楚。如果要查找源节点后边缘的距离(让我们定义后边缘的距离:节点u的距离,使得(u,v)是后边缘),则需要运行DFS来自源节点并检查是否有任何边缘是后边缘,如果是,则使用前一步骤中的预计算距离(BFS运行)返回该节点的距离。 要在DFS中检查边缘是否为后边缘,您需要有三种状态的节点(而不仅仅是两种 - 访问过的或未访问过的)。让我们使用三种颜色 - 白色,灰色和黑色。白色 - 还没有看到,灰色 - 看到但仍在DFS探索之下,BLACK - 从该节点进行DFS探索。 因此,在此版本的DFS中,如果找到GRAY节点,那么将您带到GRAY节点的边缘就是后边缘。 希望能帮助到你。 请查看Coreman版本的DFS算法以供参考。