在有向图中找到强连通分量?

时间:2014-05-16 03:04:00

标签: algorithm graph

我正在遵循Skiena的算法设计手册。我正在开展的实施是寻找强连接组件。然而,书中有一个声明,我不明白是" 当v的最低可达顶点是v"时,会发现一个新的强连通分量。例如有向图如下图所示

Directed Graph with Connected component

以上陈述适用于顶点" V3"并且将为我们提供强连接组件,但对于V2而言,此声明也是如此,它不会给我们任何强连接组件。

我的问题是上述陈述如何始终成立?

1 个答案:

答案 0 :(得分:0)

我无法将其与我的(第一个)版本的Skienna算法设计手册联系起来,但如果这是我认为的算法(http://en.wikipedia.org/wiki/Kosaraju%27s_algorithm),那么这是第二个两部分算法的一部分,第一部分的效果是在你的图表中将有一个深度优先从V3搜索,删除该组件,在V2之前,然后才会有深度优先搜索V1

第一部分运行连续的深度优先搜索,并按照深度优先搜索最后一次访问它们的顺序对节点进行编号。您要描述的第二部分按照指定的数字的递减顺序启动深度优先搜索,并且节点之间的边缘相反。

如果A可以到达B,但是B不能到达A,那么如果第一部分在B之前访问A,它将在该深度第一次搜索中访问B并且数字A大于B,因为它在退出B之后退出A.如果它在A之前访问B,它的数字A也将大于B,因为它不会从B到达A,因此将在稍后的深度搜索中访问A.

因此,如果A可以到达B但是B不能到达A,那么在第二次传递中(边缘反转)B可以到达A但A不能到达B.它将从A开始并输出其强组件并且然后才从B开始输出其强大的组件。