基于DFS求无向图的割点及桥(割边)算法总结 POJ_1144题解

1.割点,桥(割边)定义:若v2(v1的后继节点)有且仅有反向边最远连接到v1,那么删除v1后不连通,v1是割点。作为一种特殊情况,如果v2及其后代通过反向边只能连回v2自己,那么只要删除edge(v1,v2)整个图就不连通了,那么edge(v1,v2)就是桥。2.前提:在DFS深搜树中:3.定理 : 在无向图连通图G的DFS树中,非根节点v1是G的割点当且仅当v1存在一个子节
摘要由CSDN通过智能技术生成

1.割点,桥(割边)定义:

若v2(v1的后继节点)有且仅有反向边最远连接到v1,那么删除v1后不连通,v1是割点。作为一种特殊情况,如果v2及其后代通过反向边只能连回v2自己,那么只要删除edge(v1,v2)整个图就不连通了,那么edge(v1,v2)就是桥。

2.前提:

在DFS深搜树中:

3.定理 : 

在无向图连通图G的DFS树中,非根节点v1是G的割点当且仅当v1存在一个子节点v2,使得v2及其后代都没有反向边连回v1的祖先,如果v1是根节点,当且仅当v1有两个以上子树的时候v1是割点

模版:

void DFS(int v1,int father)
{
    int v2;
    int child = 0;                                           //child记录子树个数
    dfn[v1] = low[v1] = ++dfsClock;                          //dfn[]记录DFS深度,low[]记录通过反向边最远到达的DFS深度,dfsClock对前两个数组元素初始化
    vis[v1] = true;                                          //vis[]记录是否遍历过,从而之后判断有无反向边
    for(unsigned i = 0 ; i < G[v1].size() ; ++i){            //对当前点的邻接点进行遍历
        v2 = G[v1][i];                                 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值