图的割边割点算法总结

该算法使用深度优先搜索,定义两个数组,low数组跟num数组;对于某个顶点u,如果至少存在一个顶点v使得low[v]>=num[u];既不能回到祖先,那么u为割点。
num表示当前顶点的时间戳,low表示当前顶点能够访问到最早顶点的时间戳;
割点算法
dfs中,枚举与当前顶点cur有关联的顶点i,如果i没被访问过,则dfs(i,cur),并且之后low=min(low[cur],low[i]).i为cur的儿子,之后考虑两种情况判断割点,一种是是否有两个儿子,一种是low[v]>=num[u],如果被访问过,看这点是不是当前顶点的父亲,如果不是的话,则说明是当前顶点的祖先,因此要更新当前节点cur能访问到最早顶点的时间戳,即为low[cur]=min(low[cur],num[i]);
割边算法
只需改变一个条件就好,low[v]>num[u];因为不去等号表示连父亲都回不到了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值