第7章 图3-最小生成树

合集下载

第七章图状结构

第七章图状结构

图的应用非常广泛。
2
7.1 图的类型定义
7.2 图的存储表示
7.3 图的遍历
7.4 最小生成树 7.5 两点之间的最短路径问题 7.6 拓扑排序
7.7 关键路径
3
图的结构定义:
图是由一个顶点集 V 和一个弧集 R构 成的数据结构。 Graph = (V , R ) 其中,R={<v,w>| v,w∈V 且 P(v,w)} <v,w>表示从 v 到 w 的一条弧,并称 v 为弧尾,w 为弧头。
4
由于“弧”是有方向的,因此称由顶 点集和弧集构成的图为有向图。
例如: G1 = (V1, VR1)
A
B C D E
其中 V1={A, B, C, D, E} VR1={<A,B>, <A,E>,
<B,C>, <C,D>, <D,B>, <D,A>, <E,C> }
5
若<v, w>VR 且<w, v>VR, 则称 (v,w) 为顶点v 和顶点 w 之间存在一条边。 例如: G2=(V2,VR2) V2={A, B, C, D, E, F} VR2={(A,B), (A,E),
0 0 0 1 0 1
0 0 1 0 0 1
1 1 0 0 0 0
0 1 1 1 0 0
24
无向图邻接矩阵表示法特点:
1)无向图邻接矩阵是对称矩阵 2)顶点v的度 3)判断两顶点v、u是否为邻接点 4)顶点不变,在图中增加、删除边 5)适用于边稠密的图;
25
有向图的邻接矩阵 为非对称矩阵
0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0

第七章图习题答案

第七章图习题答案

第七章图习题答案基础知识:7.1 在图7.23所示的各无向图中:(1)找出所有的简单环。

(2)哪些图是连通图?对非连通图给出其连通分量。

(3)哪些图是自由树(或森林)?答:(1)所有的简单环:(同一个环可以任一顶点作为起点)(a)1231(b)无(c)1231、2342、12341(d)无(2)连通图:(a)、(c)、(d)是连通图,(b)不是连通图,因为从1到2没有路径。

具体连通分量为:(3)自由树(森林):自由树是指没有确定根的树,无回路的连通图称为自由树:(a)不是自由树,因为有回路。

(b)是自由森林,其两个连通分量为两棵自由树。

(c)不是自由树。

(d)是自由树。

7.2 在图7.24(下图)所示的有向图中:(1) 该图是强连通的吗? 若不是,则给出其强连通分量。

(2) 请给出所有的简单路径及有向环。

(3) 请给出每个顶点的度,入度和出度。

(4) 请给出其邻接表、邻接矩阵及逆邻接表。

答:(1)该图是强连通的,所谓强连通是指有向图中任意顶点都存在到其他各顶点的路径。

(2)简单路径是指在一条路径上只有起点和终点可以相同的路径:有v1v2、v2v3、v3v1、v1v4、v4v3、v1v2v3、v2v3v1、v3v1v2、v1v4v3、v4v3v1、v3v1v4、另包括所有有向环,有向环如下:v1v2v3v1、v1v4v3v1(这两个有向环可以任一顶点作为起点和终点)(3)每个顶点的度、入度和出度:D(v1)=3ID(v1)=1OD(v1)=2D(v2)=2 ID(v2)=1OD(v2)=1D(v3)=3 ID(v3)=2OD(v3)=1D(v4)=2 ID(v4)=1OD(v4)=1(4)邻接表:(注意边表中邻接点域的值是顶点的序号,这里顶点的序号是顶点的下标值-1) vertex firstedge next┌─┬─┐┌─┬─┐┌─┬─┐0│v1│─→│ 1│─→│ 3│∧│├─┼─┤├─┼─┤└─┴─┘1│v2│─→│ 2│∧│├─┼─┤├─┼─┤2│v3│─→│ 0│∧│├─┼─┤├─┼─┤3│v4│─→│ 2│∧│└─┴─┘└─┴─┘逆邻接表:┌─┬─┐┌─┬─┐0│v1│─→│ 2│∧│├─┼─┤├─┼─┤1│v2│─→│ 0│∧│├─┼─┤├─┼─┤┌─┬─┐2│v3│─→│ 1│─→│ 3│∧│├─┼─┤├─┼─┤└─┴─┘3│v4│─→│ 0│∧│└─┴─┘└─┴─┘邻接矩阵:0 1 0 10 0 1 01 0 0 00 0 1 07.3 假设图的顶点是A,B...,请根据下述的邻接矩阵画出相应的无向图或有向图。

数据结构课后习题答案第七章

数据结构课后习题答案第七章

第七章图(参考答案)7.1(1)邻接矩阵中非零元素的个数的一半为无向图的边数;(2)A[i][j]= =0为顶点,I 和j无边,否则j和j有边相通;(3)任一顶点I的度是第I行非0元素的个数。

7.2(1)任一顶点间均有通路,故是强连通;(2)简单路径V4 V3 V1 V2;(3)0 1 ∞ 1∞ 0 1 ∞1 ∞ 0 ∞∞∞ 1 0邻接矩阵邻接表(2)从顶点4开始的DFS序列:V5,V3,V4,V6,V2,V1(3)从顶点4开始的BFS序列:V4,V5,V3,V6,V1,V27.4(1)①adjlisttp g; vtxptr i,j; //全程变量② void dfs(vtxptr x)//从顶点x开始深度优先遍历图g。

在遍历中若发现顶点j,则说明顶点i和j间有路径。

{ visited[x]=1; //置访问标记if (y= =j){ found=1;exit(0);}//有通路,退出else { p=g[x].firstarc;//找x的第一邻接点while (p!=null){ k=p->adjvex;if (!visited[k])dfs(k);p=p->nextarc;//下一邻接点}}③ void connect_DFS (adjlisttp g)//基于图的深度优先遍历策略,本算法判断一邻接表为存储结构的图g种,是否存在顶点i //到顶点j的路径。

设 1<=i ,j<=n,i<>j.{ visited[1..n]=0;found=0;scanf (&i,&j);dfs (i);if (found) printf (” 顶点”,i,”和顶点”,j,”有路径”);else printf (” 顶点”,i,”和顶点”,j,”无路径”);}// void connect_DFS(2)宽度优先遍历全程变量,调用函数与(1)相同,下面仅写宽度优先遍历部分。

离散数学7-树

离散数学7-树

(b)
(a)
V5
2
1
V7
8
9
V2
V4
2
3
V8
5
V1
V1
V4
V5
1
3
V7
V6
8
V4
2
V8
5
6
V1
1
V5
6
V7
V6
8
3
V8
5
6
V7
9
V3
(e)
V3
(f)
(g)
22
V2
V3
(h)
五.应用举例——求最小生成树
例3 用管梅谷算法求下图的最小生成树。
23
五.应用举例——求最小生成树
例3 用管梅谷算法求下图的最小生成树。
成圈。
首先证明T无简单回路。对n作归纳证明。
(i) n=1时,m=n-1=0,显然无简单回路;
(ii)假设顶点数为n-1时无简单回路,现考察顶点数是n的情况:此时至少有一
个顶点v其次数d(v)=1。因为若n个顶点的次数都大于等于2,则不少于n条边,但这与
m=n-1矛盾。
删去v及其关联边得到新图T’,根据归纳假设T’无简单回路,再加回v及其关联
边又得到图T,则T也无简单回路。
再由图的连通性可知,加入任何一边后就会形成圈,且只有一个圈,否则原图
中会含圈。
9
二. 基本定理——证明
证明(4):(3)(4),即证一个无圈图若加入任一边就形成圈,
则该图连通,且其任何一边都是桥。
若图不连通,则存在两个顶点vi和vj,在vi和vj之间没有路,若
加边(vi,vj)不会产生简单回路,但这与假设矛盾。由于T无简单回

第七章 练习题参考答案

第七章  练习题参考答案

V1 V3 V6
7. 对下图所示的有向图
(1) 画出它的邻接表 (2) 根据邻接表写出其拓扑排序序列
解:(1)邻接表为
0
2
5∧
2
3
4∧
2 3∧
4∧
1
2
3
6∧
1
4∧
(2)由邻接表可得拓朴排序序列:
1 5 2 3 64
8.已知n个顶点的有向图用邻接矩阵表示,编 写函数,计算每对顶点之间的最短路径。
4 18 ∧
2
1 12
32
5 22 ∧
3
1 16
22
44∧
4
1 18
34
5 10 ∧
5
2 22
4 10 ∧
解:(1) V1
12 V2
16 2
18
4 V3 22
V4
10 V5
(2)深度优先遍历的结点序列:v1,v2,v3,v4,v5
广度优先搜索的结点序列:v1,v2,v3,v4,v5
(3)最小生成树
CD CA CAB
CD CA CAB
CD CA CABΒιβλιοθήκη CD3DB
DB
DB DBC
DBCA DB DBC
DBCA DB DBC
10.对于如图所示的AOE网,求出各活动可能 的最早开始时间和允许的最晚开始时间, 哪些是关键活动?
a1=4
v2
v1
a3=2
a2=3
v3
a5=6 v4
a4=4
解:
顶点 Ve Vl V1 0 0 V2 4 4 V3 6 6 v4 10 10
if(length[i][k]+length[k][j]<length[i][j]) { length[i][j]=length[i][k]+length[k][j];

数据结构(C语言版)_第7章 图及其应用

数据结构(C语言版)_第7章 图及其应用
(1)创建有向图邻接表 (2)创建无向图的邻接表
实现代码详见教材P208
7.4 图的遍历
图的遍历是对具有图状结构的数据线性化的过程。从图中任 一顶点出发,访问输出图中各个顶点,并且使每个顶点仅被访 问一次,这样得到顶点的一个线性序列,这一过程叫做图的遍 历。
图的遍历是个很重要的算法,图的连通性和拓扑排序等算法 都是以图的遍历算法为基础的。
V1
V1
V2
V3
V2
V3
V4
V4
V5
图9.1(a)

图7-2 图的逻辑结构示意图
7.2.2 图的相关术语
1.有向图与无向图 2.完全图 (1)有向完全图 (2)无向完全图 3.顶点的度 4.路径、路径长度、回路、简单路径 5.子图 6.连通、连通图、连通分量 7.边的权和网 8.生成树
2. while(U≠V) { (u,v)=min(wuv;u∈U,v∈V-U); U=U+{v}; T=T+{(u,v)}; }
3.结束
7.5.1 普里姆(prim)算法
【例7-10】采用Prim方法从顶点v1出发构造图7-11中网所对 应的最小生成树。
构造过程如图7-12所示。
16
V1
V1
V2
7.4.2 广度优先遍历
【例7-9】对于图7-10所示的有向图G4,写出从顶点A出发 进行广度优先遍历的过程。
访问过程如下:首先访问起始顶点A,再访问与A相邻的未被 访问过的顶点E、F,再依次访问与E、F相邻未被访问过的顶 点D、C,最后访问与D相邻的未被访问过的顶点B。由此得到 的搜索序列AEFDCB。此时所有顶点均已访问过, 遍历过程结束。
【例7-1】有向图G1的逻辑结构为:G1=(V1,E1) V1={v1,v2,v3,v4},E1={<v1,v2>,<v2,v3>,<v2,v4>,<v3,v4>,<v4,v1>,<v4,v3>}

数据结构-第7章图答案

数据结构-第7章图答案

7.3 图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点, 并且使图中的每个顶点仅被访问一次的过程。 一、深度优先搜索 从图中某个顶点V0 出发,访问此顶点,然后依次 从V0的各个未被访问的邻接点出发深度优先搜索遍 历图,直至图中所有和V0有路径相通的顶点都被访 问到,若此时图中尚有顶点未被访问,则另选图中 一个未曾被访问的顶点作起始点,重复上述过程, 直至图中所有顶点都被访问到为止。
void BFSTraverse(Graph G, Status (*Visit)(int v)) { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组 visited。 for (v=0; v<G.vexnum; ++v) visited[v] = FALSE; InitQueue(Q); // 置空的辅助队列Q for ( v=0; v<G.vexnum; ++v ) if ( !visited[v]) { // v尚未访问 EnQueue(Q, v); // v入队列 while (!QueueEmpty(Q)) { DeQueue(Q, u); // 队头元素出队并置为u visited[u] = TRUE; Visit(u); // 访问u for ( w=FirstAdjVex(G, u); w!=0; w=NextAdjVex(G, u, w) ) if ( ! visited[w]) EnQueue(Q, w); // u的尚未访问的邻接顶点w入队列Q
4。邻接多重表
边结点
mark ivex
顶点结点
ilink
jvex
jlink
info
data
firstedge
#define MAX_VERTEX_NUM 20 typedef emnu {unvisited, visited} VisitIf; typedef struct Ebox { VisitIf mark; // 访问标记 int ivex, jvex; // 该边依附的两个顶点的位置 struct EBox *ilink, *jlink; // 分别指向依附这两个顶点的下一条 边 InfoType *info; // 该边信息指针 } EBox; typedef struct VexBox { VertexType data; EBox *firstedge; // 指向第一条依附该顶点的边 } VexBox; typedef struct { VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum, edgenum; // 无向图的当前顶点数和边数 } AMLGraph;

最小生成树问题

最小生成树问题

2.1 最小生成树

树T(V,E)的性质:



E 树的边数等于其顶点数减“1”,即 V 1 ; 树的任意两个顶点之间恰有一条初级链相连接; 在树中任意去掉一条边后,便得到一个不连通的 图; 在树中任意两个顶点之间添加一条新边,所得新 图恰有一个初级圈。
例如,图 6.4.1 给出的 G1 和 G2 是树,但 G3 和 G4 则不是树。
44
44 69
结果显示于图
求最小生成树的 Prim 算法
Prim 算法的直观描述 假设 T0 是赋权图 G 的最小生成树。任选一 个顶点将其涂红,其余顶点为白点;在一个端 点为红色,另一个端点为白色的边中,找一条 权最小的边涂红,把该边的白端点也涂成红色; 如此,每次将一条边和一个顶点涂成红色,直 到所有顶点都成红色为止。最终的红色边便构 成最小生成树 T0 的边集合。
在求最小生成树的有效算法中,最著名的两个是 Kruskal(克罗斯克尔)算法和 Prim(普瑞姆)算法, 其迭代过程都是基于贪婪法来设计的。 1.求最小生成树的 Kruskal 算法
Kruskal 算法的直观描述 假设 T0 是赋权图 G 的最小生成树,T0 中的边和 顶点均涂成红色,初始时 G 中的边均为白色。 ① 将所有顶点涂成红色; ② 在白色边中挑选一条权值最小的边,使其与红 色边不形成圈,将该白色边涂红; ③ 重复②直到有 n1 条红色边,这 n1 条红色边 便构成最小生成树 T0 的边集合。
最小生成树算法
一个简单连通图只要不是树,其生成树就不唯 一,而且非常多。一般地,n 个顶点地完全图,其 不同地生成树个数为 nn2。因而,寻求一个给定赋 权图的最小生成树,一般是不能用穷举法的。例如, 30 个顶点的完全图有 3028个生成树,3028 有 42 位, 即使用最现代的计算机,在我们的有生之年也是无 法穷举的。所以,穷举法求最小生成树是无效的算 法,必须寻求有效的算法。

数据结构简答题

数据结构简答题

数据结构简答题第⼀章绪论1、数据结构是⼀门研究什么的学科?数据结构是⼀门研究⾮数值计算的程序设计问题中,计算机操作对象及对象间的关系和施加于对象的操作等的学科。

2、数据存储结构有哪⼏种类型?存储结构可分为顺序存储、链式存储、索引存储和散列存储。

3、数据逻辑结构包括哪⼏种类型?逻辑结构包括线性结构和⾮线性结构。

更细分的话可以说,逻辑结构包括集合、线性结构(线性表、栈、队列等)、树形结构和⽹状结构。

4、数据结构与数据类型有什么区别?答:数据结构这⼀术语有两种含义,⼀是作为⼀门课的名称,⼆是作为⼀个科学的概念,⽬前尚⽆公认定义,⼀般认为,数据结构包括三个⽅⾯数据的逻辑结构,数据的存储结构,数据的运算。

⽽数据类型是值的集合和操作的集合,可以看做是已实现了的数据结构,后者是前者的⼀种简化情况。

5、数据类型和抽象数据类型是如何定义的?⼆者有何相同和不同之处?抽象数据类型的主要特点是什么?使⽤抽象数据类型的主要好处是什么?数据类型和抽象数据类型是如何定义的?⼆者有何相同和不同之处?抽象数据类型的主要特点是什么?使⽤抽象数据类型的主要好处是什么?答:数据类型是程序设计语⾔中的⼀个概念,数据类型是值的集合和操作的集合,可以看做是已实现了的数据结构抽象数据类型指⼀个数学模型及定义在该模型上的⼀组操作。

抽象的意义在于数据类型的数学抽象特性。

抽象数据类型的定义仅取决于它的逻辑特性,⽽与其在计算机内部如何表⽰与实现⽆关。

⽆论其内部如何变化。

只要它的数学特性不变就不影响它的外部使⽤。

抽象数据类型和数据类型实质上是⼀个概念,但是抽象数据类型的范围更⼴,它已不再局限于机器已定义和实现的数据类型,还包括⽤户在设计软件系统时⾃⾏定义的数据类型。

使⽤抽象数据类型定义的软件模块含定义,表⽰和实现三部分,封装在⼀起,对⽤户透明(提供接⼝),⽽不必了解实现细节。

6、名词解释数据:是对客观事物的符号表⽰,在计算机科学中指所有能输⼊到计算机并能被计算机程序处理的符号总称。

数据结构第7章 图习题

数据结构第7章 图习题

习题7 图单项选择题1.在一个图中,所有顶点的度数之和等于所有边数的____倍。

A. 1/2B. 1C. 2D. 42.任何一个无向连通图的最小生成树。

A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在3.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的____倍。

A. 1/2B. 1C. 2D. 44.一个有n个顶点的无向图最多有____条边。

A. nB. n(n-1)C. n(n-1)/2D. 2n5.具有4个顶点的无向完全图有____条边。

A. 6B. 12C. 16D. 206.具有6个顶点的无向图至少应有____条边才能确保是一个连通图。

A. 5B. 6C. 7D. 87.在一个具有n个顶点的无向图中,要连通全部顶点至少需要____条边。

A. nB. n+1C. n-1D. n/28.对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是____。

A. nB. (n-1)2C. n-1D. n29.对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为_①___;所有邻接表中的接点总数是_②___。

①A. n B. n+1 C. n-1 D. n+e② A. e/2 B. e D. n+e10.已知一个图如图所示,若从顶点a出发按深度搜索法进行遍历,则可能得到的一种顶点序列为__①__;按宽度搜索法进行遍历,则可能得到的一种顶点序列为__②__。

① A. a,b,e,c,d,f B. e,c,f,e,b,d C. a,e,b,c,f,d D. a,e,d,f,c,b② A. a,b,c,e,d,f B. a,b,c,e,f,d C. a,e,b,c,f,d D. a,c,f,d,e,b图一个无向图11.已知一有向图的邻接表存储结构如图所示。

⑴根据有向图的深度优先遍历算法,从顶点v1出发,所得到的顶点序列是____。

A. v1,v2,v3,v5,v4B. v1,v2,v3,v4,v5C. v1,v3,v4,v5,v2D. v1,v4,v3,v5,v2⑵根据有向图的宽度优先遍历算法,从顶点v1出发,所得到的顶点序列是____。

最小生成树

最小生成树

对于图G=(V,E)的每一条e∈E, 赋予相应的权数 f(e),得到一个网络图,记为N=(V,E,F),
设T=(为T的权,N中权数最小的 生成树称为N的最小生成树。 许多实际问题,如在若干个城市之间建造铁路网、 输电网或通信网等,都可归纳为寻求连通赋权图 的最小生成树问题。 下面介绍两种求最小生成树的方法:
例1 求下图所示的最小生成树。
v2 e1 v1 e2 e6 v4 e 7 v3
v5
解:按各边的权的不减次序为:
e1 e 2 e3 e7 e6 e 4 e5 e8
所以,首先取 e1 , e2 ,尔后再取 e7 和 e6 , 则构成最小生成树 .
二、破圈法 破圈法就是在图中任取一个圈,从圈中去 掉权最大的边,将这个圈破掉。重复这个 过程,直到图中没有圈为止,保留下的边 组成的图即为最小生成树。 例2 同例1。 解:在圈v2v2v3中,去掉权最大的边e2或e3; 在圈v2v3v4中,去掉权最大的边e4; 在圈v3v4v5中,去掉权最大的边e5; 在圈中v2v3v5,去掉权最大的边e8;
在剩下的图中,已没有圈,于是得到最小生成树, 如下图:
v2 e1 v1 e2 e6 v4 v3 e7
v5
例3 求下图的最小生成树。
C1 1 B1 3 5 A 4 B2 6 5 8 7 6 C4 C3 3 3 4 D3 8 3 C2 8 D2 4 E A
4 3 B2 C4 4 D3 C3 3
B 2 A 3 5 J 2 2 H 5 G 1 F 2 1 S 3 1 4 C 3 4 1 4 E
5
D 2
A 2
B
1
C D 1 2 E
1 S 2 H

数据结构 习题 第七章 图 答案

数据结构 习题 第七章  图 答案

第7章图二.判断题部分答案解释如下。

2. 不一定是连通图,可能有若干连通分量 11. 对称矩阵可存储上(下)三角矩阵14.只有有向完全图的邻接矩阵是对称的 16. 邻接矩阵中元素值可以存储权值21. 只有无向连通图才有生成树 22. 最小生成树不唯一,但最小生成树上权值之和相等26. 是自由树,即根结点不确定35. 对有向无环图,拓扑排序成功;否则,图中有环,不能说算法不适合。

42. AOV网是用顶点代表活动,弧表示活动间的优先关系的有向图,叫顶点表示活动的网。

45. 能求出关键路径的AOE网一定是有向无环图46. 只有该关键活动为各关键路径所共有,且减少它尚不能改变关键路径的前提下,才可缩短工期。

48.按着定义,AOE网中关键路径是从“源点”到“汇点”路径长度最长的路径。

自然,关键路径上活动的时间延长多少,整个工程的时间也就随之延长多少。

三.填空题1.有n个顶点,n-1条边的无向连通图2.有向图的极大强连通子图3. 生成树9. 2(n-1) 10. N-1 11. n-1 12. n 13. N-1 14. n15. N16. 3 17. 2(N-1) 18. 度出度 19. 第I列非零元素个数 20.n 2e21.(1)查找顶点的邻接点的过程 (2)O(n+e) (3)O(n+e) (4)访问顶点的顺序不同 (5)队列和栈22. 深度优先 23.宽度优先遍历 24.队列25.因未给出存储结构,答案不唯一。

本题按邻接表存储结构,邻接点按字典序排列。

25题(1) 25题(2) 26.普里姆(prim )算法和克鲁斯卡尔(Kruskal )算法 27.克鲁斯卡尔28.边稠密 边稀疏 29. O(eloge ) 边稀疏 30.O(n 2) O(eloge) 31.(1)(V i ,V j )边上的权值 都大的数 (2)1 负值 (3)为负 边32.(1)n-1 (2)普里姆 (3)最小生成树 33.不存在环 34.递增 负值 35.16036.O(n 2) 37. 50,经过中间顶点④ 38. 75 39.O(n+e )40.(1)活动 (2)活动间的优先关系 (3)事件 (4)活动 边上的权代表活动持续时间41.关键路径 42.(1)某项活动以自己为先决条件 (2)荒谬 (3)死循环 43.(1)零 (2)V k 度减1,若V k 入度己减到零,则V k 顶点入栈 (3)环44.(1)p<>nil (2)visited[v]=true (3)p=g[v].firstarc (4)p=p^.nextarc45.(1)g[0].vexdata=v (2)g[j].firstin (3)g[j].firstin (4)g[i].firstout (5)g[i].firstout (6)p^.vexj (7)g[i].firstout (8)p:=p^.nexti (9)p<>nil (10)p^.vexj=j(11)firstadj(g,v 0) (12)not visited[w] (13)nextadj(g,v 0,w)46.(1)0 (2)j (3)i (4)0 (5)indegree[i]==0 (6)[vex][i] (7)k==1 (8)indegree[i]==047.(1)p^.link:=ch[u ].head (2)ch[u ].head:=p (3)top<>0 (4)j:=top (5)top:=ch[j].count(6)t:=t^.link48.(1)V1 V4 V3 V6 V2 V5(尽管图以邻接表为存储结构,但因没规定邻接点的排列,所以结果是不唯一的。

数据结构第7章图习题

数据结构第7章图习题

第七章图习题1 单项选择题1、图中有关路径的定义是()。

A、由顶点和相邻顶点序偶构成的边所形成的序列B、由不同顶点所形成的序列C、由不同边所形成的序列D、上述定义都不对2、设无向图的顶点个数为n,则该图最多有()条边。

A、n– 1B、n (n– 1)/2C、n (n+1)/2D、n23、一个n个顶点的连通无向图,其边的个数至少为()。

A、n– 1B、nC、n+1D、n log n4、下面结构中最适于表示稀疏无向图的是()。

A、邻接矩阵B、逆邻接表C、邻接多重表D、十字链表5、下列哪一种图的邻接矩阵是对称矩阵?()A、有向图B、无向图C、AOV网D、AOE网6、当一个有N个顶点的图用邻接矩阵A表示时,顶点V i的度是()。

A、第j列所有元素之和B、第i行所有元素之和C、不确定D、第j列所有元素之和+第i行所有元素之和7、下面哪一方法可以判断出一个有向图是否有环(回路)()。

A、深度优先遍历B、拓扑排序C、求最短路径D、求关键路径8、在图采用邻接表存储时,求最小生成树的Prim 算法的时间复杂度为( )。

A、O(n)B、O(n+e)C、O(n2)D、O(n3)9、求解最短路径的Floyd算法的时间复杂度为( )。

A、O(n)B、O(n+e)C、O(n2)D、O(n3)10、已知有向图G=(V, E),其中V={v1, v2, v3, v4, v5, v6, v7},E={<v1,v2>, <v1,v3>, <v1,v4>, <v2,v5>, <v3,v5>, <v3,v6>, <v4,v6>, <v5,v7>, <v6,v7>}, G的拓扑序列是()。

A、v1,v3,v4,v6,v2,v5,v7B、v1,v3,v2,v6,v4,v5,v7C 、v 1,v ,v 4,v 5,v 2,v 6,v 7D 、v 1,v 2,v 5,v 3,v 4,v 6,v 711、在用邻接表表示图时,拓扑排序算法时间复杂度为( )。

最小生成树

最小生成树
int a,b;//边的两个顶点的编号 int d;//边的权值
}edge[111边的条数,s用来存放最小生成树的总权值 int root[111];//存储父节点
bool cmp(Edge a,Edge b) {
return a.d<b.d; } int find(int a)//寻找父节点
T1
u
顶 点 集 U
u'
T2 v
顶 点 集 V-U
13
应用举例——最小生成树
Prim算法
34 B 12
A 19
26 E
F
46 25
25 38
C
D
17
U={A}
V-U={B, C, D, E, F}
cost={(A, B)34, (A, C)46, (A, D)∞, (A, E)∞, (A, F)19}
最小生成树
生成树是一个连通图G的一个极小连通子 图。包含G的所有n个顶点,但只有n-1条 边,并且是连通的。
当生成树中所包含的边的权值和最小, 我们称之为最小生成树。
最小生成树性质
最小生成树的边数必然是顶点数减一,|E| = |V| - 1。 最小生成树不可以有循环。 最小生成树不必是唯一的。
16
应用举例——最小生成树
Prim算法
34 B 12
A 19
26 E
F
46 25
25 38
C
D
17
U={A, F, C, D} V-U={B, E} cost={(A, B)34, (F, E)26}
{ if(root[a]==a) return a; return root[a]=find(root[a]);

03 最小生成树

03 最小生成树
6 2 3 5 3 6 5 6 4 6 1 1 5 5 4 2 5 6 2 1 3 4
所选的边都是一端 一端在 1. 所选的边都是一端在V-U中,另一端在U中; 中 另一端在 中 2. 从一个顶点开始逐步增加 中的顶点,Prim算法可称为“加点 从一个顶点开始逐步增加U中的顶点 中的顶点, 算法可称为“ 算法可称为 法”。
普里姆(Prim)算法过程示例 普里姆(Prim)算法过程示例 (Prim)
28 1 10 6 25 25 5 22 4 14 7 18 2 16 3 12
普里姆(Prim)算法过程示例 普里姆(Prim)算法过程示例 (Prim)
28 1 10 6 25 25 5 22 4 14 7 18 2 16 3 12
A B C D E B C
A D E B C
A D E
F 图G
G
F
G
F
G
图G的生成树 的生成树
图G的又一生成树 的又一生成树
1. 如果在一棵生成树上添加一条边,必定构成一个环; 如果在一棵生成树上添加一条边 必定构成一个环 添加一条边 必定构成一个 因为这条边使得它依附的那两个顶点之间有了第二 条路径。 条路径。 2. 一棵有 个顶点的生成树 连通无回路图)有且仅有 一棵有n个顶点的生成树 连通无回路 有且仅有 个顶点的生成树(连通无回路图 有且仅有(n条边,则是 1)条边 如果一个图有 个顶点和小于 条边,如果一个图有 个顶点和小于 条边 条边 如果一个图有n个顶点和小于(n-1)条边 则是 非连通图。如果它多于 连通图。如果它多于(n-1)条边 则一定有回路。 条边,则一定有回路。 多于 条边 则一定有回路 3. 有(n-1)条边的图不一定都是生成树。 条边的图不一定都是生成树。 条边的图不一定都是生成树

数据结构:第7章 图3-最小生成树

数据结构:第7章 图3-最小生成树

• 按照生成树的定义,n 个顶点的连通网络的生成树有 n
个顶点、n-1 条边。
即有权图
目标:
在网络的多个生成树中,寻找一个各边权值之和最小的
生成树。
构造最小生成树的准则 ❖ 必须只使用该网络中的边来构造最小生成树;
❖ 必须使用且仅使用n-1条边来联结网络中的n个顶点;
❖ 不能使用产生回路的边。
典型用途:
(b) u={1} w={2,3,4,5,6}
0 6 1 5
6
0
5
3
1 5 0 7 5 4
5
7
0
2
3 5 0 6
4 2 6 0
i
1234
closest[i] 1 1 1 1
lowcost[i] 0 6 1 5
56 11 ∞∞
closest用于存放顶点序号 lowest存放权值
15 4 6
1 25
3
54
5
6
(c ) u={1,3} w={2,4,5,6}
1
1
4
25
6
32
54
5
6
(d) u={1,3,6} w={2,4,5}
i
1234 5 6
closest[i] 1 3 1 1 3 3
lowcost[i] 0 5 0 5 5 4
i
1234 5 6
closest[i] 1 3 1 6 3 3

v3 v1

树 v4 v2
v1
0^ 1^ 0^ 1^
2.生成森林
若一个图是非连通图或非强连通图,但有若 干个连通分量或若干个强连通分量,则通过 深度优先搜索遍历或广度优先搜索遍历,不 可以得到生成树,但可以得到生成森林,且 若非连通图有 n 个顶点,m 个连通分量或强 连通分量,则可以遍历得到m棵生成树,合 起来为生成森林,森林中包含n-m条树边。

数据结构 C语言版(严蔚敏版)第7章 图

数据结构 C语言版(严蔚敏版)第7章 图
data Fout
1
2
4
1
e6 2 4
2016/11/7
29
7.3 图的遍历



从已给的连通图中某一顶点出发,沿着一 些边访遍图中所有的顶点,且使每个顶点 仅被访问一次,就叫做图的遍历 ( Graph Traversal )。 图中可能存在回路,且图的任一顶点都可 能与其它顶点相通,在访问完某个顶点之 后可能会沿着某些边又回到了曾经访问过 的顶点。 为了避免重复访问,可设置一个标志顶点 是否被访问过的辅助数组 visited [ ]。
2
1 2
V2
V4
17
结论:



无向图的邻接矩阵是对称的; 有向图的邻接矩阵可能是不对称的。 在有向图中, 统计第 i 行 1 的个数可得顶点 i 的出度,统计第 j 行 1 的个数可得顶点 j 的入度。 在无向图中, 统计第 i 行 (列) 1 的个数可得 顶点i 的度。
2016/11/7

18

2
邻接表 (出度表)
adjvex nextarc
data firstarc
0 A 1 B 2 C
2016/11/7
1 0 1
逆邻接表 (入度表)
21

网络 (带权图) 的邻接表
6 9 0 2 1 C 2 8 3 D
data firstarc Adjvex info nextarc
2016/11/7
9



路径长度 非带权图的路径长度是指此路径 上边的条数。带权图的路径长度是指路径 上各边的权之和。 简单路径 若路径上各顶点 v1,v2,...,vm 均不 互相重复, 则称这样的路径为简单路径。 回路 若路径上第一个顶点 v1 与最后一个 顶点vm 重合, 则称这样的路径为回路或环。

数据结构第7章习题答案

数据结构第7章习题答案

第7章 《图》习题参考答案一、单选题(每题1分,共16分)( C )1. 在一个图中,所有顶点的度数之和等于图的边数的倍。

A .1/2 B. 1 C. 2 D. 4 (B )2. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。

A .1/2 B. 1 C. 2 D. 4 ( B )3. 有8个结点的无向图最多有条边。

A .14 B. 28 C. 56 D. 112 ( C )4. 有8个结点的无向连通图最少有条边。

A .5 B. 6 C. 7 D. 8 ( C )5. 有8个结点的有向完全图有条边。

A .14 B. 28 C. 56 D. 112 (B )6. 用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。

A .栈 B. 队列 C. 树 D. 图 ( A )7. 用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。

A .栈 B. 队列 C. 树 D. 图( C )8. 已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是( D )9. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按深度优先遍历的结点序列是A . 0 2 4 3 1 5 6 B. 0 1 3 5 6 4 2 C. 0 4 2 3 1 6 5 D. 0 1 23465 ( D )10. 已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是( A )11. 已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是A .0 2 4 3 1 5 6B. 0 1 3 6 5 4 2C. 0 1 3 4 2 5 6D. 0 3 6 1 5 4 2⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡0100011101100001011010110011001000110010011011110A .0 1 3 2 B. 0 2 3 1 C. 0 3 2 1 D. 0 1 2 3A.0 3 2 1 B. 0 1 2 3C. 0 1 3 2D. 0 3 1 2(A)12. 深度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(D)13. 广度优先遍历类似于二叉树的A.先序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历(A)14. 任何一个无向连通图的最小生成树A.只有一棵 B. 一棵或多棵 C. 一定有多棵 D. 可能不存在(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)二、填空题(每空1分,共20分)1. 图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 2 5 6 7 3
4
8
1 2 6 3 4 4 5 7 8 8 (a) 深度优先生成树 (b) 两种生成树示意图 广度优先生成树 5 6
无向图 G7
2
1 3 7
例1 :画出下图的生成树
v0 v1 0 v0 邻 1 v1 接 2 v 2 表 3 v3 4 v4 v0
3 1 ^
v2
v3 v4 无向连通图 v4
9
5
3
普里姆算法
下面仅讨论无向网的最小生成树问题。
普里姆方法的思想是:在图中任取一个顶点K作 为开始点,令U={k},W=V-U,其中V为图中所 有顶点集,然后找一个顶点在U中,另一个顶点 在W中的边中最短的一条,找到后,将该边作为 最小生成树的树边保存起来,并将该边顶点全部 加入U集合中,并从W中删去这些顶点,然后重 新调整U中顶点到W中顶点的距离, 使之保持最小, 再重复此过程,直到W为空集止。求解过程参见 下页图。(先深度再广度)
w={5}
i closest[i]
1 2 3 4 1 3 1 6
5 3
6 3
i closest[i]
1 2 3 4 1 3 1 6
5 2 3
6 3 0 5 2 0 6 3 0
lowcost[i] 0 5 0 0
1 2
5
4
6
0
lowcost[i] 0 0 0 0 i closest[i]
5
1
3
1 2 3 4 1 3 1 6
先写出邻接表(或邻接矩阵): 0 A 1 2 1 B 0 0 ^ 4 ^ 3 ^ 0 ^ 7 6 6 ^ 11 6 0 1 12 7 9 ^ ^ 8 10 ^ 12 ^
5
11 ^
2
3 4
C
D E
再写出DFS结果(3次) ABMJLCF DE GHKI A B C F J L M E
最小连 通! 子图1: 10 ^

A
B
C
F I
D
G
E
H K J
L A C F D J L M B
M
G
E I
H
K
对于连通图,深度优先搜索遍历算法及 广度优先搜索遍历算法中遍历图过程中历经 边的集合和顶点集合一起构成连通图的极小 连通子图。它是连通图的一颗生成树。 生成树:是一个极小连通子图,它含有图 中全部顶点,但只有n-1条边。 由深度优先搜索遍历得到的生成树, 称为深度优先生成树,由广度优先搜索遍历 得到的生成树,称为广度优先生成树。见下 页无向图G7的两种生成树。
• 按照生成树的定义,n 个顶点的连通网络的生成树有 n 个顶点、n-1 条边。
目标: 在网络的多个生成树中,寻找一个各边权值之和最小的 生成树。 构造最小生成树的准则
即有权图
必须只使用该网络中的边来构造最小生成树;
必须使用且仅使用n-1条边来联结网络中的n个顶点; 不能使用产生回路的边。
3
5
4
2
6 w={ }
lowcost[i] 0 0 0 0
(g) u={1,3,6,4,2,5}
prim 方法构造最小生成树的过程
克鲁斯卡尔(kruskal)算法
1. 克鲁斯卡尔算法基本思想 克鲁斯卡尔算法的基本思想是:将图中所有边按权值递 增顺序排列,依次选定取权值较小的边,但要求后面选 取的边不能与前面选取的边构成回路,若构成回路,则 放弃该条边,再去选后面权值较大的边,n个顶点的图中, 选够n-1条边即可。 例如,对上图中无向网,用克鲁斯卡尔算法求最小生 成树的过程见下图。 4
典型用途:
欲在n个城市间建立通信网,则n个城市应铺n-1条线路; 但因为每条线路都会有对应的经济成本,而nபைடு நூலகம்城市可能有n(n1)/2 条线路,那么,如何只能选择n–1条线路,使总费用最少? 数学模型: 顶点———表示城市,有n个; 边————表示线路,有n–1条; 边的权值—表示线路的经济代价; 连通网——表示n个城市间通信网。
1 2 5 (a) 选第 1 条边
1
3 6
4
6
1
2 5 (b) 选第 2 条边
1
3
6
2
6
1 2
4
1
3 5
6
1 2
4
1
3
6
3
2
6
3
5
4
2
6
(c ) 选第 3 条边
(d) 选第 4 条边
1 2
5
5
1
3
4
6
1 或者 2
3
4
2
6
1 5
5 3
4
6
3
4
2
6
(e )
选第 5 条边(不能选(1,4)边,会构成回路,但可选(2,3)或(5,3)中之一)
数据结构讲义 第7章 图
- 最小生成树
7.4.1 无向图的连通分量和生成树
若图是连通的或强连通的,则从图中某 一个顶点出发可以访问到图中所有顶点; 若图是非连通的或非强连通图,则需从 图中多个顶点出发搜索访问而每一次从 一个新的起始点出发进行搜索过程中得 到的顶点访问序列恰为每个连通分量中 的顶点集。
Prim算法构造最小生成树演示
例 2 1 6 1 5 3 6 6 5 5 4 2 1 1 1 3 1 1 3
3 5
4
4
6
6
1 1 1 3 4 2 4 2 5 1 3 4 4 2 6 2 3 5 5
1 1 3 4 4
2
6
6
假设开始顶点就选为顶点1,故首先有U={1},W={2,3,4, 5,6} 5
例2:画出下图的生成森林(或极小连通子图)
A C D E B
这是一个无向非连通图
F I
G
H
K J
求解步骤: Step1:先求出邻接矩阵或邻接表;
M
L
Step2:写出DFS或BFS结果序列; Step3:画出对应子图或生成森林。
注:亦可由邻接矩阵或邻接表直接画出生成森林
下面选用邻接表方式来求深度优先搜索生成森林
5
6 7
F
G H
8
9 10 11 12
I
J K L M
子图2: 12 ^
D
G I
9
11 ^
子图3:
H
K
子图
(或连通分量)
A C F L J
B D M E I G H K
A
生 成 森 林
D
C B M J L E I
G
H K
F
7.4.3 最小生成树
首先明确: • 使用不同的遍历图的方法,可以得到不同的生成树;从 不同的顶点出发,也可能得到不同的生成树。
i
closest[i]
1 2 3 4
1 3 1 1
5
3 5
6
3 4
i
closest[i]
1 2 3 4
1 3 1 6
5
3 5
6
3 0
lowcost[i] 0 5 0 5
lowcost[i] 0 5 0 2
1 2 5
4
6
1 2
4
6
5 5
1
3
2 4
6
5
5
1
3
3
4
2
6
(e) u={1,3,6,4} w={2,5} (f) u={1,3,6,4,2}
显然此连通网 是一个生成树!
问题抽象: n个顶点的生成树很多,需要从中选一棵代价最 小的生成树,即该树各边的代价之和最小。此树便称为最小 生成树MST(Minimum cost Spanning Tree)
1 13 17 3 9 7 5
7 5 6 12 18
2
10
24
4
1 13
7
2 6 5 10 4
i closest[i]
1 2 3 4 1 1 1 1
5 1
6 1
lowcost[i] 0 6 1 5


closest用于存放顶点序号 lowest存放权值
1 2 5
5 1
3
4
6
1 2
5 5
5 5
5
1
3
6
4
4
6
4
2
6
(c ) u={1,3} w={2,4,5,6}
(d) u={1,3,6} w={2,4,5}
克鲁斯卡尔方法求最小生成树的过程
克鲁斯卡尔算法构造最小生成树演示
作业

请对以下的无向带权图,分别用普里姆算法和 克鲁斯卡尔算法求其最小生成树,写出如讲义 中的每一步的示意图。
4
4 4 3
2
3 2 2
0
1 0 1
^
^ ^ ^
DFS 生 成 树
v3 v4 v2 v1
BFS 生 成 树
v0 v3 v4 v1
v2
2.生成森林
若一个图是非连通图或非强连通图,但有若 干个连通分量或若干个强连通分量,则通过 深度优先搜索遍历或广度优先搜索遍历,不 可以得到生成树,但可以得到生成森林,且 若非连通图有 n 个顶点,m 个连通分量或强 连通分量,则可以遍历得到m棵生成树,合 起来为生成森林,森林中包含n-m条树边。 生成森林可以利用非连通图的深度优先搜 索遍历或非连通图的广度优先搜索遍历算 法得到。
6
1 4 2
5 5
5
1
3
7 4 2
6
6
2
6
1
5

1
3

6
4
3
6
相关文档
最新文档