TarJan 算法求解有向连通图强连通分量[有向图强连通分量]
在有向图G中,如果两个 顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。 非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。
下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。 搜索到节点u=6时,DFN[6]=LOW[6],找到了一个强连通分量。退栈到u=v为止,{6}为一个强连通分量。 经过该算法,求出了图中全部的三个强连通分量{1,3,4,2},{5},{6}。 此外,该Tarjan算法与求无向图的双连通分量(割点、桥)的Tarjan算法也有着很深的联系。学习该Tarjan算法,也有助于深入理解求双连通分量的Tarjan算法,两者可以类比、组合理解。 
Tarjan 算法求解强连通分量什么是强连通分量
我们先给出一个强连通分量的定义:在有向图 G 中,如果两个顶点 u, v 之间存在一条 u 到 v 的路径,也存在一个 v 到 u 的路径,则称这两个顶点 u, v 是强连通的(strongly 如果有向图 G 的任意两个顶点都强连通,则称 G 是一个强连通图。
非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。 下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量,总共三个强连通分量。
? 然后执行弹栈操作,直到 u == v 为止,{6} 为一个强连通分量。
?
此时我们在图中标记一下 6 节点,计作 DFN = 4,LOW = 4。 我们通过一次 DFS ,求出了图中全部的三个强连通分量 {1, 3, 4, 2},{5},{6}。