Tragin算法用于求强连通图详解

Tragin算法不仅可以求割点和割边(割点和割边的算法差不多),还可以求取有向图的强连通分量个数(当然可是根据问题的不同适当做出修改比如求连通分量包括那些),时间复杂度是O(N+M)主要花费在了DFS上。先说一下割点中的low[]数组,其主要作用是保存当前节点所能接触到的标号最早的节点(不会从其父节点这条路过,也就是它上一个DFS的那个节点过去),如果不太清楚割点算法的请先看看割点算法https://blog.csdn.net/ZCMU_2024/article/details/81154947

本人认为Tragin算法在强连通图中用到了两个定理:

1.一个有向图是强连通的,当且仅当图中有一个回路,它至少包含每个节点一次

2.在有向图G中,它的每一个节点位于且只位于一个强分图中

然后说说算法的一些实现(最好先看看割点是怎么实现的不然不好理解):

dfs[] 保存节点的标号

low[]保存节点所能接触到的标号最小的节点

instack[] 一会再说

stack<int> s一会再说

vis[] DFS通用数组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值