130 likes | 243 Views
1. 2. 3. 一、复习 图论的概念. 简单图 :没有环和多重边(关联同一对顶点的二条以上的边),则称为简单图。(一般指无向图) 简单图中,任一回路的长度至少是 3 。 基础图 :从图 G 中删去所有环,并使每一对相邻的顶点只留下一条边,即可得到 G 的一个生成子图,称为 G 的基础简单图 点的可达 : u 和 v 是有向图的两个顶点,若有一条从 u 到 v 的有向路,则称 v 是从 u 可达的,或者说 u 可达 v 完全图: 图中每一对不同顶点都有一条边相连. 二、连通性. (1) 如果 有向图 D 的 任意 两个顶点都互相可达,则称 D 是 强连通
E N D
1 2 3 一、复习 图论的概念 • 简单图:没有环和多重边(关联同一对顶点的二条以上的边),则称为简单图。(一般指无向图) • 简单图中,任一回路的长度至少是3。 • 基础图:从图G中删去所有环,并使每一对相邻的顶点只留下一条边,即可得到G的一个生成子图,称为G的基础简单图 • 点的可达:u和v是有向图的两个顶点,若有一条从u到v的有向路,则称v是从u可达的,或者说u可达v • 完全图:图中每一对不同顶点都有一条边相连
二、连通性 • (1)如果有向图D的任意两个顶点都互相可达,则称D是强连通 • (2)如果有向图D的任何两个顶点至少由一个顶点到另一个顶点可达,则称为单向连通 • (3)若D的基础图Gd是单向连通,则称D为弱连通 • 显然,每一个强连通是单向连通的,而每一个单向连通是弱连通
1 2 1 2 1 2 5 5 5 4 3 4 3 4 3 (c)弱连通图 (b)单连通图 (a)强连通图
A B C D E F G 一个连通分量 • 1、连通分量概念 • 无向图的极大连通子图成为一个连通分量。 • 2、求一个无向图的所有连通分量, • 可以使用标号法。 Var visited=array[1..n] of datatype; mark:integer; Procedure connect() Var i:integer; Begin fillchar(visited,sizeof(visited),0); mark:=1; for i:=1 to n do if visited[i]=0 then begin dfs(I, mark,visited[i]); inc(mark); End; End; Procedure dfs(k,mark:integer,var t:integer ); Var i:integer; Begin if visited[k]<>0 then exit; t:=mark; //置标识 for i:=1 to n do if a[k,i]<>0 then dfs(I,mark,visited[i]) End;
1 1 2 3 3 2 4 4 3、 2-连通分量 • 在一个无向连通图G中,如果任意去掉一个顶点i以及与i相连的所有边后所得到的图依然是连通的,则称该图为2-连通图。否则,如果去掉顶点i,得到两个或两个以上的连通分量,则该图不是2-连通的,顶点i被称为关键顶点。 (a)2-连通图 (b)非2-连通图
4、性质 • (1)在2-连通图中,任何一对顶点都至少存在两条路径可以相互到达。图的连通性不会受任何一个顶点的影响。 • (2)无向图的极大2-连通子图称为2-连通分量。 • A、一个无向图都具有1个或多个2-连通分量。 如果无向图是一个2-连通图,那么它本身就是自己唯一的连通分量。 • B、一个无向图具有2个或2个以上的连通分量时,它的任意两个2-连通分量最多只可能有一个公共顶点。(请用反证法进行证明)
6 1 4 2 3 5 图1 图1是无向图,顶点3为图中关键顶点,可知图1不是2-连通图,包含2个2-连通子图(1,2,3),(3,4,5), 假设:在图1上有另外一个公共顶点6,就是说图1中两个2-连通子图之间有2个公共顶点。 从用2-连通图的定义可知,图1就是一个2-连通图,整个图是一个连通分量,这与题中的2个2-连通分量相矛盾。 因此,性质b是正确的 • C、同一条边不可能处在多个2-连通分量中 • 证明:任意一条边p连接顶点(a,b),如果p属于两个2-连通分量中,则顶点a,b在两个连通分量中,与性质b矛盾。 • 因此,所有的2-连通分量事实上把整个无向图的边划分为互不相交的边子集。 • Menger定理:设G是简单图,则G是k-连通图的充分必要条件是G中任何两点之间有k条独立路(无公共点的路)
1 6 1 2 4 5 2 7 3 5 8 3 6 4 (a)无向图 (b)深度优先搜索生成树 7 8 • 5 找一个无向图G的所有2-连通分量的方法: • 深度优先搜索的生成树。 • 如图: 注意: (b)图中两条虚线边,属于图G不属于生成树的边,称为回边 (1)如果生成树的根是关键顶点,当且仅当它有多于一个子女。 (2)如果生成树的非根节点是关键顶点,当且仅当它没有一个后代可以通过回边回到它的祖先 反过来,如果有一个或多个后代有回边回到它的祖先,非根节点是关键节点是否成立??
在dfs生成树中,一般还定义一个dfn(x)表示x在dfs中访问次序,例如dfn(x)=4,表示顶点x是第4个被访问的顶点。如果有dfs(i)<dfs(j),则表示顶点i是优先于j访问的。在dfs生成树中,一般还定义一个dfn(x)表示x在dfs中访问次序,例如dfn(x)=4,表示顶点x是第4个被访问的顶点。如果有dfs(i)<dfs(j),则表示顶点i是优先于j访问的。 • 为了方便知道一个顶点是不是关键顶点,对于每一个顶点定义一个值low,low[i]是从顶点i或i的后代出发通过回边所能到达的最低深度优先数。 • Low[i]:=min{dfn[i], • min{low[j]|j是i的子女}, • min{dfn[k]|(i,k)是一条回边} • }
Dfn:=1 Low:=1 Dfn:=2 Low:=2 1 Dfn:=3 Low:=3 Dfn:=5 Low:=5 2 Dfn:=6 Low:=6 Dfn:=4 Low:=1 3 Dfn:=7 Low:=7 5 6 Dfn:=8 Low:=5 4 (b)深度优先搜索生成树 7 8 从右图中,可以看出这里有两个2-连通分量。注意:红色的部分要在最后修改 如果,(1,5)之间有一个回边,那么右图中dfn与low数组的变化情况会如何呢? 下图从v3开始搜索:
6 1 6 1 4 5 4 5 2 7 2 7 3 8 8 3 (a)无向图 (b)无向图 同一个连通分量成为块,块与块之间的路称为桥。 深度优先搜索树本身只能求连通分量,但是可以通过标志,保存很多重要的信息, Dfn与low的标志为我们提供了求块,桥,以及关键顶点起到重要的作用。 左图的关键顶点为:2 5 桥:e[2,5] 块 {1,2,3,4} {5,6,7,8} 右图的关键顶点为:? 桥:? 块 ? 请画出dfs树
我们曾学习过求有向图强连通分量的三个算法:我们曾学习过求有向图强连通分量的三个算法: Tarjan算法、Kosaraju算法 、Gabow算法 都与深度优先搜索树有关系。 要求掌握Tarjan算法,并且写出无向图的求连通分量的算法!!