思路:
[Kosaraju算法]
Kosaraju是基于对有向图及其逆图两次DFS的方法,其时间复杂度也是O(N+M)。kosaraju算法的步骤如下:
(1)在有向图G上,从某个顶点出发进行DFS,并按其所有邻接点的搜索都完成(即退出DFS函数)的顺序将顶点排列起来。
(2
)
在有向图
G
上,从最后完成搜索的顶点出发,在图
G
的逆图
G
’
上进行
DFS
,若此次遍
历不能访问到有向图中所有顶点,则从余下的顶点中最后完成搜索的那个顶点出发,继
续做逆图中的
DFS
,直至有向图中的所有顶点都被访问到为止