有来路,也必须有回路

有向图中,从A能到B,不代表从B也能回到A。两点强连通要求两个方向都存在有向路径;路径可以经过其他顶点,也不要求A与B之间直接有一对相反边。单向的一条长链就不能因此成为同一个强连通分量。

相互可达构成等价关系,因而把全部顶点分成互不重叠的类。这里的分量是不能再加入其他顶点而仍维持相互可达的最大集合;“最大”指包含关系下不能扩展,不是只挑全图顶点数最多的那个集合。

参考:[1] [2]

两遍搜索利用有向顺序

Kosaraju–Sharir方法先反转全部边,在反向图上计算深度优先搜索的逆后序;再按这个顺序在原图中从尚未标记的顶点开始搜索,每次搜索得到一个新分量。顶点顺序是关键,不能把第二遍随意改为任意起点的普通可达集合。

在邻接表模型下,这套预处理可用O(V+E)时间完成,并给各顶点保存分量编号。之后判断两点是否强连通,只需比较编号。编号只是本次划分的标识,不承诺在图改变或实现改变后仍保持相同。

参考:[1] [2]

把分量压缩成无环结构

把每个分量缩为一个节点,保留不同分量之间原有方向,就得到分量图。它不可能仍有跨分量的有向环:若存在这样的环,环上各分量便可相互到达,理应属于同一个更大的分量。

这种表示把内部循环与外部依赖分开,适合分析有向关系的整体层次。但强连通只陈述给定边关系下的可达性,不会增加原图没有的业务含义。还需要具体路径时,单有分量编号也不足以还原全部路由。

参考:[1] [2]