码迷,mamicode.com
首页 > 编程语言 > 详细

浅见Tarjan算法与无向图连通性

时间:2019-08-24 17:02:23      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:san   欧拉路   一个   奇数   问题   span   一个栈   mamicode   定义   

无向图的割点和桥

定义

割点:删除这个点时图将不再连通

割边:删除这条便时图将不再连通

时间戳

在图的深度优先搜索中的顺序(第几个被访问)

搜索树

在深搜时形成的树

图一为一张无向连通图,中间的为起点,红边为“发生递归”的边

图二就是搜索树了,编号为时间戳

 

 技术图片

 技术图片

 

追溯值

追溯值为low[],low[x]表示x及x的能到达的节点的dfn最小值

割边的判定法则

无向图(x, y)是桥,当且仅当在搜索树上存在x的一个子节点y,满足:

low[y] > dfn[x]

模板

技术图片

割点判定法则

如果x并不是树的根节点,则x是割点当且仅当搜索树上存在一个x的子节点y,满足:

low[y] >= dfn[x]

特别的,当x为树的根节点且有2个及以上的子树时,x也为割点

模板

技术图片

无向图的双联通分量

若一张无向联通图不存在割点,则是 点双联通图 

若一张无向联通图不存在割边,则是 边双联通图

无向图的极大点双联通子图叫做 “点双联通分量”

无向图的极大边双联通子图叫做 “边双联通分量”

定理

一张无向连通图是“点双联通图”,当且仅当满足下列2个条件之一:

1 图的节点数<=2

2 图中的任意两点有不小于2条的不重复的路径可以互相到达,即在一个简单环中

边双求法

只需要求出图中所有的割边,把这些割边删掉后,会出现若干个连通块,每一个连通块就是一个边双

边双模板

技术图片

点双求法

点双其实就是割点向自己每一条出边进行深搜所能遍历到的点(遇到另一个割点不行)

我们可以在tarjan中维护一个栈,方法:

1 当一个节点第一次被访问时,把该节点入栈

2 当判定割点生效时,无论x是否为根,都要:

   (1)从栈顶不断弹出节点,直到弹出节点y

   (2)刚才弹出的点构成了一个点双

点双模板 

技术图片

欧拉路问题

定义

欧拉回路:在图中经过每一条边一次并且仅一次的回路叫作欧拉回路

欧拉路径:在图中经过每一条边一次并且仅一次的路径叫作欧拉路径

欧拉图:有欧拉回路的图

半欧拉图:有欧拉路径但是没有欧拉回路的图

事实上 欧拉回路就是一条特殊的欧拉路径

定理

1 无向图G为欧拉图,每个节点的入度都为偶数

2 无向图G为半欧拉图,除起点终点入读为奇数,剩下的节点的入度为偶数

模板

技术图片

 

浅见Tarjan算法与无向图连通性

标签:san   欧拉路   一个   奇数   问题   span   一个栈   mamicode   定义   

原文地址:https://www.cnblogs.com/-sheldon/p/11405115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!