算法五:图的割点和桥

原创 2015年07月09日 16:16:51
一、定义
图的割点
一个无向连接图中,如果删除某个顶点后,图不再连同(即任意两点之间不能互相到达) ,称这样的顶点为割点
或:某个点是割点当且仅当删除该点和与该点相关联的边后图变得不连通。

图的割边/桥: 
一个无向连通图中,如果删除某条边后,图不再连通,这条边就为割边。
或:某条边是割边当且仅当删除该边后图变的不连通。

二.求割点,桥
 使用dfs(深搜)来求割点和桥。先明确一下几点:
1、  图的dfs相当于是对相应的dfs树的遍历。
2、  无向图的dfs树,无论以哪个点为根都可以遍历完所有的点。
3、  无向图的dfs树,没有横叉边(连接两个子树的边)。

对原图进行深度优先搜索,会生成一颗深度优先搜索生成树。定义dfs[u]为u在深度
优先搜索生成树中被遍历到的序号,low[u]为u或者他的子树中可以通过非父子边追
溯到的最早结点。

①一个顶点是割点,满足下列条件之一:

1).u是树根,u有两个或两个以上的分支/u有多于一个子树;
2).u不是树根,且满足存在(u,v)为树枝边(或称父子边,即u为v在搜索树中的父亲),(u,v)是树边且low[v]>=dfn[u]。
low(u)=min{dfn(u),low(v) if(u,v)是树枝边/父子边,dfn(v) if(u,v)是后向边/返祖边}

②桥无向边(u,v),当且仅当(u,v)为树枝边,且满足dfn[u]<low[v]。
注:1、为方便程序编写,我们都采用low[v]来判断u。(理论上low[u]也可以判断割点)

三、编程
准备两个数组low和dfn。
Low数组是一个标记数组,记录该点所在的强连通子图所在搜索子树的根节点的Dfn值(很绕嘴,往下看你就会明白)。
dfn数组记录搜索到该点的时间,也就是第几个搜索这个点的。根据以下几条规则,经过搜索遍历该图(无需回溯)和对栈的操作,我们就可以得到该有向图的强连通分量。

1.数组的初始化:当首次搜索到点p时,dfn与low数组的值都为到该点的时间。
2.堆栈:每搜索到一个点,将它压入栈顶。
3.当点p有与点p’相连时,如果此时(时间为dfn[p]时)p’在栈中(是父子边),p的low值为min(low(p),dfn(p’) )。
4.当点p有与点p’相连时,如果此时(时间为dfn[p]时)p’不在栈中(是后向边),p的low值为min(low(p),low(p’))。
5.每当搜索到一个点经过以上操作后(也就是子树已经全部遍历)的low值等于dfn值,则将它以及在它之上的元素弹出栈。这些出栈的元素组成一个强连通分量。
6.继续搜索(或许会更换搜索的起点,因为整个有向图可能分为两个不连通的部分),直到所有点被遍历。

      由于每个顶点只访问过一次,每条边也只访问过一次,我们就可以在O(n+m)的时间内求出有向图的强连通分量。

四、应用 
1、一个表示通信网络的图的连通度越高,其系统越可靠,无论是哪一个站点出现故
障或遭到外界破坏,都不影响系统的正常工作;
2、一个航空网若是重连通的,则当某条航线因天气等某种原因关闭时,旅客仍可从
别的航线绕道而行;
3、若将大规模的集成电路的关键线路设计成重连通的话,则在某些元件失效的情况
下,整个片子的功能不受影响,反之,在战争中,若要摧毁敌方的运输线,仅需破坏
其运输网中的关节点即可。

Tarjan三大算法之双连通分量(割点,桥)

Robert Endre Tarjan是一个美国计算机学家,他传奇的一生中发明了无数算法,统称为Tarjan算法。其中最著名的有三个,分别用来求解 1) 无向图的双连通分量 2) 有向图的强连通分...
  • fuyukai
  • fuyukai
  • 2016年04月23日 11:25
  • 4635

图的强连通分量,块,割点,桥

写在前面:整合和参考了网上的一些相关文章和刘汝付佳的《内功心法》里的部分内部。       因为在求强连通分量,块,割点,桥的时候,其基本过程是DFS,所以对DFS的一基本的知识作些介绍。      ...

图的割点算法vs图的割边算法

图的割点 在一个无向连通图中,如果删除某个顶点后,图不再连通(即任意两点之间不能相互到达),我们称这样的顶点为割点(或者称割顶)。 上图中的2号顶点就是割点,因为删除2号后,4,5不通,1...

poj1144-tarjan求割点

何为割点?也就是题目中的关键点。在一个无向图中,去掉一个点,这个无向图会变成多个子图,那么这个点就叫做割点 同理,割边也是如此,如果去掉一条边,能让无向图变成多个子图,那么这条边叫做割边,所谓的桥。...

无向连通图的割点、桥

无向连通图的割点、桥 泳裤王子原创,转载请注明出处 http://blog.csdn.net/tclh123/article/details/6705392 预备知识:        割点集合 ...
  • tclh123
  • tclh123
  • 2011年08月21日 00:40
  • 6983

连通图的割点、割边(桥)、块、缩点,有向图的强连通分量

连通图的割点、割边(桥)、块、缩点,有向图的强连通分量   【本文摘选自百度文库】 一、基本概念 无向图 割点:删掉它之后(删掉所有跟它相连的边),图必然会分裂成两个或两个以上的子图。 块:没有割点...

无向图的桥

/*  *无向图的桥及边的双连通分量,Tarjan算法O(E)  */ #include #include #include using namespace std; #define...

求无向图的割点和桥

由具体实例引出无向图割点的求法,以及存在重边情况下求割边的改进方法 ------------------------------------------------------------ 因而对于求...

tarjan找桥,找割点,无向图的最小割权边--hdu4738(2013杭州网络赛)

思路:找边权值最小的桥,注意当为0时,至少要派一个人。 自己扩充了一下,找桥和割点,练习一下。 #include #include #include #include #include #in...

无向图找桥

割顶是去掉后让无向图不再连通的点。 在一棵DFS树中, 1.根root是割顶   -------------  它至少有两个儿子 2.其他点v是割顶 ------------- ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法五:图的割点和桥
举报原因:
原因补充:

(最多只允许输入30个字)