Tarjan算法的操作原理

1.       Tarjan算法基于定理:在任何深度优先搜索中,同一强连通分量内的所有顶点均在同一棵深度优先搜索树中。也就是说,强连通分量一定是有向图的某个深搜树子树。

2.       可以证明,当一个点既是强连通子图Ⅰ中的点,又是强连通子图Ⅱ中的点,则它是强连通子图Ⅰ∪Ⅱ中的点。

3.       这样,我们用low值记录该点所在强连通子图对应的搜索子树的根节点的Dfn值。注意,该子树中的元素在栈中一定是相邻的,且根节点在栈中一定位于所有子树元素的最下方。

4.       强连通分量是由若干个环组成的。所以,当有环形成时(也就是搜索的下一个点已在栈中),我们将这一条路径的low值统一,即这条路径上的点属于同一个强连通分量。

5.       如果遍历完整个搜索树后某个点的dfn值等于low值,则它是该搜索子树的根(根的编号最小,大家都统一为它,没有被统一的,也就是把别人统一的,就是根)。这时,它以上(包括它自己)一直到栈顶的所有元素组成一个强连通分量。

猜你喜欢

转载自blog.csdn.net/wenjie2002/article/details/76779213
今日推荐