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

China☆狼群 提交于 2019-11-28 10:35:36

无向图的割点和桥

定义

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

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

时间戳

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

搜索树

在深搜时形成的树

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

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

 

 

 

 

追溯值

追溯值为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为半欧拉图,除起点终点入读为奇数,剩下的节点的入度为偶数

模板

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!