有向图的强联通分量总结

1. 对于一个有向图来说,连通分量的定义:对于分量中的任意两点u,v,必然可以从u走到v,而且可以从v走到u,强连通分量:也称为极大连通分量(连通分量加上任意一些点之后它都不是一个连通分量了),强连通分量的主要作用:将任意一个有向图转化为一个有向无环图(DAG),有向无环图其实是一个拓扑图,当一个有向图变成有向无环图之后那么很多问题都变得比较简单了(这一点是强连通分量的核心),如下图所示,缩点其实是将所有的强连通分量缩成一个点:

 有向无环图有什么好处呢?我们可以在图中求解最短/长路的时候可以直接递推,时间复杂度为O(n + m),应用:先求解图中所有的强连通分量,把所有强连通分量缩成一个点,缩完点之后按照拓扑序来处理这个问题,这样问题会比较好处理,如何求解强连通分量呢:求解强连通分量基于深度优先遍历(dfs),在深度优先遍历的过程中将边分为四大类:

① 树枝边 (x,y):x是y的父节点,② 前向边(x,y):x是y的祖先节点,③ 后向边(x,y):与前向边是对称的,④ 横叉边(x,y):往之前搜过的分支搜索;对于节点x如何判断是否在某一个强连通分量中,情况1:存在后向边指向祖先节点;情况2:先走到横叉边,然后由横叉边走到祖先节点,前向边是不需要管的,因为此时是不存在环的,x如果在某个强连通分量中那么它一定要走到某个祖先。并且在使用tarjan算法求解所有强连通分量的时候那么最终每一个强连通分量编号都是按照逆序的顺序排列的,所以满足拓扑序的要求:

2. 下图为强联通分量的例子:

猜你喜欢

转载自blog.csdn.net/qq_39445165/article/details/121270447
今日推荐