定向图连接

时间:2011-10-01 19:15:56

标签: algorithm graph

给定一个有向图G,找到一个顶点v的最佳方法是什么,这样在G中有一条从v到每个其他顶点的路径?

此算法应在线性时间内运行。是否有现有的算法可以解决这个问题?如果没有,我会理解如何在线性时间内解决这个问题(我只能想到那些肯定不需要线性时间的解决方案)。

3 个答案:

答案 0 :(得分:3)

制作所有顶点的列表L.

选择一个;把它叫做V.从V开始,走图形,在你走的时候从列表中删除点,并保持一堆未被访问的边。当你找到一个循环(你访问的某些顶点不在列表中)时,从堆栈中弹出一个边缘并继续。

如果堆栈为空,且L不为空,则从L中选择一个新顶点,将其称为V,然后像以前一样继续。

当L最终为空时,你最后选择的V就是答案。

答案 1 :(得分:2)

这可以在边数的线性时间内完成。

  1. 找到强关联组件。
  2. 将每个组件压缩到一个节点中。
  3. 对压缩图进行拓扑排序,排名最高的节点将具有到其他每个节点的路径(如果图完全连接)。

答案 2 :(得分:0)

我想我得到了正确答案。

  1. 获取SCC。
  2. 将每个组件压缩到一个节点中。
  3. 检查每对相邻节点是否可达。
  4. 这是一个充分而必要的条件。