Tarjan算法求解一个无向图中的割点和桥问题

本文介绍了无向图中的割点和桥的基本概念,并详细阐述了Tarjan算法如何用于求解这些问题。割点是删除后会导致连通分量增加的节点,而双连通图没有割点。算法应用主要集中在通信网络的可靠性评估。暴力解决方法效率较低,而Tarjan算法可以一次性遍历完成,维护dfn和low数组来确定割点与桥。文章提供相关资源以供深入学习。
摘要由CSDN通过智能技术生成

基本概念

割点:Articulation Point
在无向连通图中,删除一个顶点v及其相连的边后,原图从一个连通分量变成了两个或多个连通分量,则称顶点v为割点,同时也称关节点(Articulation Point)。
双连通的图:一个没有关节点的连通图称为重连通图(biconnected graph)(双连通图)。
连通度:k,若在连通图上至少删去k 个顶点才能破坏图的连通性。

算法应用

算法应用:通信网络中,用来衡量系统可靠性,连通度越高,可靠性越高。

求解方法

  1. 暴力求解,依次删除每一个节点v,用DFS(或者BFS)判断是否连通,再把节点加入图中。若用邻接表(adjacency list),需要做V次DFS,时间复杂度为O(V∗(V+E))O(V∗(V+E))
  2. Jarjan算法,只用一次DFS求解。

第一个方法不多说:
对于第二个方法
我们要维持两个数据结构:
dfn[u]:记录节点u在DFS过程中被遍历到的次序号。
low[u]:记录节点u或u的子树通过非父子边追溯到最早的祖先节点(即DFS次序号最小)。
其中对于low[u]的理解是这样的:当(u,v)为树边时,且v没有被访问过,则low[u]是min(low[u]和low[v])。当v被访问过,如果v不是u的父节点(如果是则说明有重边,不考虑),则(u,v)为回边,则low[u]取min(low[u], dfn[v])。
这里写图片描述
这里写图片描述

代码思路解析

#include<iostream>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值