图的关节点(Tarjan算法)

数据结构复习–求图的关节点(Tarjan算法)

重连通图的关节点(割点)

关节点

若连通图中某个顶点和其相关联的边被删去后,该连通图被分割成两个或两个以上的联通分量,则称此节点为关节点(割点)。

重(双)连通图

没有关节点的连通图称为双连通图。
即从一个双连通图中删去任何一个顶点及其想关联的边,它仍为一个连通图。

深度优先生成树与回边

从图中任意顶点开始,执行深度优先搜索并在顶点被访问时给它们编号。
而对于图中实际存在而深度优先生成树中不存在的边,称为回边(v,w)或背向边(v,w)。
如下例,虚线部分表示回边。

在这里插入图片描述
在这里插入图片描述

Visited数组与Low数组

visited数组

第一次对图执行深度优先搜索时,依次访问节点,同时按访问顺序对节点编号。对于每一个节点v,我们称其先序序号为visited[v]。

low数组

然后对深度优先搜索树上的每一个节点v,计算编号最低的顶点,称之为low[v]。
其意义为(个人理解):通过该点,经过零条或多条边及最多一条回边,可以到达的顶点的编号的最小值。例如上图中的C点,其先序编号为3,但可首先通过一条边达到D点,并通过D的回边到达A,所以其low数组编号,及可到达的最低节点编号为1。

上图中顶点的数字标注为visited[v]/low[v]。

Low数组求法

在这里插入图片描述

解释:对于任意一个顶点V,其low数组值为自身先序编号(visited[v]),其所有孩子节点的low值的最小值,与其通过回边相连的祖先节点K的先序编号(visited[k])这三者中的最小值。

关节点的判定

1.若生成树中根节点顶点V,其子树个数大于1,则该节点一定为关节点(易理解)。
2.对于非根节点v,它是割点当且仅当它有某个儿子w,使得Low[w]>=Visited[v]。注:该条件在根处总是满足,所以需要进行特别判断。
上例中顶点C与D为关节点。

Low[w]>=Visited[v]的理解:

Low[w]>=Visited[v]含义为,v有某个孩子w,其可到达的节点的最低先序编号大于等于其父亲的先序编号。即w一定不可能到达比v先序编号低的节点(深度优先搜索中比v先访问的节点),则删除节点v后,w一定不能与v之前的节点相连,则该图不为连通图。

Tarjan算法

Tarjan算法为求关节点的常用算法,其时间复杂度为O(V+E)。

void 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值