kosaraju算法
计算机科学用语
在计算机科学中,Kosaraju的算法(也称为Kosaraju-Sharir算法)是线性时间的算法来找到一个有向图强连通分量
算法思想
Kosaraju算法的解释和实现都比较简单,为了找到强连通分支,首先对图G运行DFS,计算出各顶点完成搜索的时间f;然后计算图的逆图GT,对逆图也进行DFS搜索,但是这里搜索时顶点的访问次序不是按照顶点标号的大小,而是按照各顶点f值由大到小的顺序;逆图DFS所得到的森林即对应连通区域。具体流程如图(1~4)。
上面我们提及原图G的逆图GT,其定义为GT=(V,ET),ET={(u,v):(v,u)∈E}}。也就是说GT是由G中的边反向所组成的,通常也称之为图G的转置。在这里值得一提的是,逆图GT和原图G有着完全相同的连通分支,也就说,如果顶点s和t在G中是互达的,当且仅当s和t在GT中也是互达的。
为了方便大家理解,附下引用博客中的例图:
上面是第一次dfs
这里对逆图进行dfs,就可以得到强连通分量了。
伪代码
c++代码
样例输出:
2
参考资料
最新修订时间:2024-09-30 21:14
目录
概述
算法思想
参考资料