强连通分量【k 算法、t 算法】

连通分量就是一个各个顶点能互相达到的图

无向图的连通分量选取任意一个顶点使用DFS遍历即可,遍历完所有顶点所需的DFS的次数就是连通分量的数量

有向图的强连通分量由于是有向的【从A点开始DFS能访问到B点,但不一定能从B返回A】,所以不能简单地认为遍历完顶点就行,这时只有选取正确的顶点顺序进行DFS才能得到正确的结果。有篇博客写得很好,安利一波:https://www.cnblogs.com/nullzx/p/6437926.html

k 算法:通过取反图,然后DFS后序遍历【就是先遍历未被访问顶点的所有未被访问的顶点,再遍历该点】将点放入栈中,从栈顶【最后一个入栈的】开始取就是一个符合上述要求的正确的顺序。

t 算法:时间复杂度优于 k 算法。主要通过两个数组记录1)instack[i]顶点是否在递归栈中,2)vis[i]顶点是否被遍历。【如果不在栈中并且被访问了,直接返回,不能使用那个点进行更新栈内点的low[u]值,因为就不是一个栈内的也就是不是一个环上的,而如果在栈中并且被访问了,说明有环,就能回溯更新环上点u的low[u]值】继续安利博客:【博主懒...https://blog.csdn.net/qq_16234613/article/details/77431043

 

转载于:https://www.cnblogs.com/MekakuCityActor/p/8948083.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值