该算法使用深度优先搜索,定义两个数组,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];因为不去等号表示连父亲都回不到了。
图的割边割点算法总结
最新推荐文章于 2024-06-11 16:00:19 发布