tarjian算法 最大强连通分支
来源:互联网 发布:网络怎么连接电视 编辑:程序博客网 时间:2024/06/07 07:02
tarjian算法是利用DFS寻找最大连通分支的算法,算法只需要对图进行一次DFS,无论时间复杂度还是代码复杂度都不是太高。
思路就是先利用DFS构造一棵树,那么分成四种边——树边、前向边、后向边、交叉边。前向边在环中等价于树边 (请画图验证) ,因此直接忽略,交叉边在树中不构成环(依然画个图...),只有后向边构成环(还是画个图),因此,重点就是利用后向边,找到此点的成环的祖先,再找到同祖先且成环的点,这个环就构造成了。
关键是怎么寻找这个祖先呢?
巧妙的是tarjian大人使用了一个low(祖先)和一个栈(被遍历过但未处理的点)来记录信息。
首先是栈,如果DFS到一个点u,先把此点的LOW[u]=DFN[u]=index ( 解释一下,index是这个点被遍历的顺序,也就是时间戳 ) 就把这个点压到栈中,然后继续进行DFS,
如果一个点u有边指向栈中的点V,也就是有后向边了,这时候使得LOW[u]=DFN[v],继续进行DFS,当对其子节点的DFS结束的时候,要判断一下,是其子节点的LOW小还是自己的LOW小(因为其子节点可能因为后向边而使得LOW被更新为其祖先的LOW),如果小的话,就把自己的LOW更新为子节点的LOW。然后直到某点的DFS结束,若这个点的DFN=LOW,那么这个点就是一个祖先节点(他没有后向边,他的子节点也没有指向比他更祖先的后向边,因此他的LOW没有被更新),那么就从栈里面弹出值,直到弹到他自己这就是一个强连通分支了。
- tarjian算法 最大强连通分支
- 【笔记】tarjian算法 求强连通分量
- 强连通分支算法
- 有向图强连通分量的Tarjian算法
- [学习]用tarjian算法求强连通分量,tarjian算法缩点[学习知识~]
- 算法之强连通分支
- 强连通分支算法--Kosaraju算法
- 图算法之强连通分支
- 强连通分支及kosaraju算法
- 强连通分支之Tarjan 算法
- 求强连通分支 tarjan算法
- 强连通分支算法--Tarjan算法和Gabow算法
- 强连通分支
- POJ_1236 强连通分支
- 图论--强连通分支
- 强连通分支
- 强连通分支
- poj 2553 tarjian+缩点。。。强连通分量
- java编程思想(Think in java)读书笔记 二
- JasperReport用户手册
- 判断101-200之间素数个数,并输出
- 【ubuntu】vim安装python自动补全插件(1)
- 【ubuntu】vim安装python自动补全插件(2)
- tarjian算法 最大强连通分支
- 配置串口、输出开发板VIVI的命令选项
- hdu 1548 A strange lift
- 《敏捷软件测试:测试人员与敏捷团队的实践指南》学习感悟(一)
- 黑马程序员-JAVASE入门(面向对象,单例模式)
- 考试可以交谈,不可以,考试必须独立思考,考完可以
- 机房收费系统完美设计——事务处理VS三层架构
- hdu 1482 Counterfeit Dollar
- 从数据库中获取单个数据——ExecuteScalar用法