6:有向图的强连通性。如果有向图中的顶点都互相可达,则这幅图是强连通的。(有环)
强连通分量:强连通性将所有顶点分为了一些等价类,每个等价类都是由互相均为强连通的顶点的最大子集组成了。
如:有向无环图有 v 个强连通分量,每个顶点就是一个分量。
强连通分量的定义是基于顶点的,而非边。
重点:Kosaraju算法
命题H: 有向图G, G的反向图G(r), 利用G(r) 得到的顶点逆后序排列
reversePost ;
算法描述: 根据
reversePost 使用
dfs(G,s) 处理
G.
要证: 每次dfs(G,s)都会得到一个强连同分量, 即: 每次dfs所访问的定点都在一个强连同分量中.
证明:
证明(1)(2) 即可证明命题.
(1)dfs(G,s)中,和 s
强连通
的顶点 u 都回被访问到.
证: s与u连通,所以s可以访问到u;
(2)dfs(G,s)中,
任意
被访问到的定点v都和s是强连通的.
证
:因为s->v 所以 再证明 v->s即可
等价于 证明在G(r)中s->v.(在G(r)中有向边取反,所有G中若v->s,G(r)中s->v)
在G(r)中,s->v 变为 v->s(有向边取反)所以reversePost(图g的逆后序即为图的拓扑排序)中,v排在s之前或之后。
所以“
reversePost 使用
dfs(G(r),s)
处理
G(r).”dfs(G(r),v) 会在 dfs(G(r),s)前
结束。
因为v->s所以只有一种情况为:
dfs(G(r),s)
dfs(G(r),v) ... dfs(G(r),v)完成. ....
dfs(G(r),s)完成
-------〉s 可以到 v,s->v.
1
2
3
4
5
6
7
8
9
10
|