COMP2907 图论 强连通判断 拓扑排序

来源:互联网 发布:python 执行shell脚本 编辑:程序博客网 时间:2024/06/05 17:26

强连通图的判断有两种算法,分别是tarjan算法和Kosaraju算法。

Kosaraju:https://www.cnblogs.com/luweiseu/archive/2012/07/14/2591370.html

Tarjan:http://blog.csdn.net/mengxiang000000/article/details/51672725

真的难,觉得自己应该转行去学母猪的产后护理。

Tarjan 维护两个数组,一个是low代表第几个访问的节点,另外一个是dfn区分连通分量。初始是low=dfn, 所有unvisit的点都运行tarjan(而不是例子里的只选一个点),递归点u时如果点vunvisit就递归,否则就更新。(复习的时候看不懂就去看网站里的代码!,tt是用来表明颜色的第二段代码会用到)


Kosaraju:两次dfs,核心是从一个点开始搜 搜到搜不到之后从末尾往回遍历,然后把逆图这次搜索的点移除掉 剩下的没遍历到的和之前的点一起组成森林继续遍历。


拓扑排序是把所有的点的incoming列出来,维护两个集合S1S2,S1是incoming是0的点,S2是其他&未被移除的点,每移除一个S1的点,S2的点incoming值--,如果是0就移动到S1最后如果S2为空则有拓扑排序。