算法简介:求图的割点

算法简介

算法简介

图割点

相关概念

  • 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图.
  • 图的割点:如果去掉一个点以及与它连接的边,该点原来所在的图被分成两部分(不连通),则称该点为割点.
  • 深度优先生成树:对图进行深度优先遍历,遍历所形成的路径称为深度优先生成树

图基础知识

深度优先生成树
  • 原无向图
    在这里插入图片描述
  • 从A处开始深度优先遍历生成的深度优先生成树
    在这里插入图片描述
  • 从C处开始遍历生成的深度优先生成树
    在这里插入图片描述
  • 说明
  1. 每个图顶点含有2个数字,比如A 1/1,前面的表示Num(A)=1,即深度优先遍历的顺序;
    后一个表示Low(A)=1,表示A能够到达的最低顶点编号.
  2. 虚线表示背向边

相关算法

代码示例图
  • 原图
    在这里插入图片描述
  • 深度遍历示意图
    在这里插入图片描述
  • 最终每个顶点的最小时间戳示意图
    在这里插入图片描述
1. tarjan算法
* 时间复杂度:
  1. 深度优先遍历或广度优先遍历:O(N(N+M))
  2. tarjan算法:
    用邻接矩阵存储:O(N^2)
    用邻接表存储:O(N+M)
* 算法特点:
  1. 需要用DFS遍历图的所有顶点,记录num[顶点编号] = 顶点深度遍历时间戳
  2. 当遍历到顶点u时,枚举顶点u的所有出边,比如v,如何知道v不经过父节点u能否回到祖先节点呢?对子节点v再次DFS
  3. 需要记录每个子节点v在不经过父节点u的情况下,能够回到的最小时间戳(若存在v的父节点不止u一个的情况下):lows[v] = min(lows[v],nums[f])
  4. v回溯的时候获取当前节点的最小时间戳low[u]=min(low[u],low[v]),如果low[v]>=num[u],表示v不能不经过u回到祖先,即u为割点
* 代码示例

图割点–tarjan

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值