图查找排序习题及参考答案.docx
- 文档编号:11369228
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:68
- 大小:654.01KB
图查找排序习题及参考答案.docx
《图查找排序习题及参考答案.docx》由会员分享,可在线阅读,更多相关《图查找排序习题及参考答案.docx(68页珍藏版)》请在冰豆网上搜索。
图查找排序习题及参考答案
第6章图
学习指导
1.基本概念及术语
•图G:
由两个集合V(G)和E(G)所组成,记作G=(V,E),其中V(G)是图中顶点的非空有限集合,E(G)是图中边的有限集合。
•
有向图(Digraph):
如果图中每条边都是有向的即每条边在图示时都用箭头表示方向,则称此图为有向图。
有向图的边也称为弧,如图6-1中G1是有向图,它由V(G1)和E(G1)组成。
V(G1)={V1,V2,V3},E(G1)={
•无向图(Undigraph):
如果图中每条边都是顶点无序对,则称为无向图。
无向边用圆括号括起的两个相关顶点来表示。
在无向图中,(V1,V2)和(V2,V1)是表示同一条边。
如图6-1所示,G2和G3都是无向图。
其中,
V(G2)={V1,V2,V3,V4}
E(G2)={(V1,V2),(V1,V3),(V2,V3),(V2,V4),(V3,V4)}
V(G3)={V1,V2,V3,V4,V5,V6,V7}
E(G3)={(V1,V2),(V1,V3),(V2,V4),(V2,V5),(V3,V6),(V3,V7)}
•无向完全图和有向完全图:
若一个无向图有n个顶点,而每一个顶点与其他n-1个顶点之间都有边,这样的图称之为无向完全图。
即共有n(n—1)/2条边。
类似地,在有n个顶点的有向图中,若有n(n—1)条弧,即任意两顶点之间都有双向相反的两条弧连接,则称此图为有向完全图。
•子图:
设有两个图A和B且满足条件:
V(B)∈V(A)且E(B)∈E(A)则称B是A的子图。
•路径:
在图G中,从顶点Vp到Vq的一条路径是顶点序列(Vp,Vi1,Vi2,…,Vin,Vq)且(Vp,Vi1),(Vi1,Vi2),…,(Vin,Vq)是E(G)中的边,路径上边的数目称之为该路径长度。
对于有向图,其路径也是有向的,路径由弧组成。
•简单路径:
如果一条路径上所有顶点除其起始点和终止点外彼此都是不同的,则称该路径是简单路径。
•回路和简单回路:
在一条路径中,如果其起始点和终止点是同—顶点,则称其为回路。
简单路径相应的回路称为简单回路。
•连通图和强连通图:
在无向图G中,若从Vi到Vj有路径,则称Vi和Vj是连通的。
若G中任意两顶点都是连通的,则称G是连通图。
对于有向图而言,若G中每一对不同顶点Vi和Vj之间都有Vi到Vj和Vj到Vi的路径,则称G为强连通图。
•度、入度和出度:
若(Vi,Vj)是E(G)中的一条边,则称顶点Vi和Vj是邻接的.并称边(Vi,Vj)依附于顶点Vi和Vj。
所谓顶点的度,就是依附于该顶点的边数。
在有向图中,以某顶点为头,即终止于该顶点的弧的数目称为该顶点的入度;以某顶点为尾,即起始于该顶点的弧的数目称为该顶点的出度。
该顶点的入度和出度之和称为该顶点的度。
•
若图G中每一条边都有一个对应的数,则称G为网。
这些边上的数字称为权,它可以表示两顶点之间的距离或所花费的代价。
类似地,边上带权的有向图称为有向网。
如在图6-2中G4是一个网,而图G5则是一个有向网。
【例6-1】回答下列问题:
(1)具有n个顶点的连通图至少有多少条边?
(2)具有n个顶点的强连通图至少有多少条边?
这样的图应该是什么形状?
(3)具有n个顶点的有向无环图最多有多少条边?
解:
(1)具有n个顶点的连通图至少有n-1条边。
这是一个与生成树相关的问题。
生成树是一个连通图,它具有能够连通图中任何两个顶点的最小边集,任何一个生成树都具有n-1边。
因此,具有n个顶点的连通图至少有n-1条边。
(2)具有n个顶点的强连通图至少有n条边,这样的图是一个由n个顶点构成的环。
强连通图是相对于有向图而言的。
由于强连通图要求图中任何两个顶点之间能够相互连通,因此每个顶点至少要有一条以该顶点为弧头的弧和一条以该顶点为弧尾的弧,每个顶点的入度和出度至少各为1,即顶点的度至少为2,这样根据图的顶点数、边数以及各项点的度三者之间的关系计算可得:
边数=2×n/2=n。
(3)具有n个顶点的有向无环图最多有n×(n—1)/2条边。
这是一个拓扑排序相关的问题。
—个有向无环图至少可以排出一个拓扑序列,不妨设这n个顶点排成的拓扑序列为v1,v2,v3,…,vn,那么在这个序列中,每个顶点vi只可能与排在它后面的顶点之间存在着以vi为弧尾的弧,最多有n-i条,因此在整个图中最多有(n-1)+(n-2)+…+2+1=n×(n-1)/2条边。
2.图的存储结构
常用的存储结构有邻接矩阵和邻接表。
(1)邻接矩阵表示法
设G=(V,E)是有n(n≥1)个顶点的图。
则G的邻接矩阵是按如下定义的n阶方阵:
例如,图6-1中G1,G2的邻接矩阵分别表示为A1、A2,矩阵的行列号对应于图6-1中结点的序号。
由邻接矩阵的定义可知,无向图的邻接矩阵必定是对称阵;有向图的邻接矩阵不一定是对称的。
根据邻接矩阵,很容易判定任意两个顶点之间是否有边相连。
求各顶点的度也是非常容易的。
对于无向图,顶点Vi的度就是邻接矩阵中第i行(或第j列)上非零元的个数,即
。
对于有向图,第i行中非零元的个数为顶点Vi的出度,而第i列上的非零元个数为顶点Vi的入度。
(2)邻接表表示法
图的邻接链表存储结构是一种顺序分配和链式分配相结合的存储结构括两个部分:
一部分是向量,另一部分是链表。
邻接链表中的表头部分是向量,用来存储n个表头结点。
向量的下标指示顶点的序号。
例如,对于图6-1中G1和G2,其邻接链表如图6-3所示。
在无向图的邻接表中顶点vi的度就是第i个链表中结点的个数。
在有向图中,第i个链表的结点数仅是vi的出度,求vi的入度,必须查遍n个链表才能得出。
【例6-2】图G=(V,E),其中V={1,2,3,4,5,6},E={<1,2>,<1,3>,<1,4>,<2,5>,<3,2>,<3,5>,
<3,6>,<4,6>,<5,6>},请画出图G,并写出其邻接矩阵和邻接表表示。
解:
图G如图6-4中的(a)所示,图G的邻接矩阵和邻接表表示分别如图(b)和(c)所示。
对于这类问题,只要掌握了图的概念和存储结构就可以做出正确的答案。
通常情况下.对图的顶点排列顺序和各顶点的邻接点排列顺序并没有特定要求,因此,在写出邻接矩阵和邻接表表示时,只要按照某种排列顺序画出相应的结构图就可以了。
但应该注意的是,对于邻接矩阵表示,如果顶点结点的顺序不同,那么邻接矩阵就不相同;对于邻接表表示,如果顶点结点的顺序或者邻接点的顺序不同,那么邻接表就不相同。
3.图的遍历
给定一个无向连通图G,G=(V,E),当从V(G)中的任一顶点v出发,去访问图中其余顶点,使每个顶点仅被访问一次。
这个过程叫做图的遍历。
通常有两种遍历图的方法,—种是深度优先搜索法,另—种为广度优先搜索法。
(1)深度优先搜索
设有无向连通图G(V,E),从V(G)中任一顶点v出发深度优先搜索遍历图的步骤是:
先访问指定顶点V1,然后访问与该顶点V1相邻的顶点V2,再从V2出发,访问与V2相邻且未被访问过的任意顶点V3,然后从顶点V3出发,重复上述过程,直到一个所有邻接点都被访问过的顶点为止,然后回溯到此顶点的直接前趋,从这里出发再继续访问。
显然搜索是一个递归过程。
(2)广度优先搜索
设无向图G(V,E)是连通的,从V(G)中的任一顶点V1出发,广度优先搜索遍历图的步骤是:
首先访问指定的起始顶点V1,从V1出发,依次访问与V1相邻的未被访问过的顶点W1,W2,W3,…,Wt,然后依次从W1,W2,W3,…,Wt出发,重复上述访问过程,直到所有顶点都被访问过为止。
在广度优先搜索过程中,访问某个顶点之后,要将这个顶点保存起来,以备后面访问这个顶点的邻接点。
由搜索这个过程可知,保存的信息应该组织成一个队列。
【例6-3】已知一个无向图的邻接表如图6-5所示,要求:
(1)画出该无向图;
(2)根据邻接表,分别写出用DFS(深度优先搜索)和BFS(广度优先搜索)算法从顶点V0开始遍历该图后所得到的遍历序列。
解:
(1)该无向图如图6-6所示。
(2)根据该无向图的邻接表表示,从顶点V0开始的深度优先遍历序列为:
V0、V2、V3、V1、V4、V6、V5。
广度优先遍历序列为V0、V2、V5、V6、V1、V3、V4。
从图的逻辑结构上来讲,从图中某个顶点开始的深度(或广度)优先遍历序列不一定是唯一的。
这是因为在逻辑结构中,并没有对每个顶点的所有邻接点规定它们之间的先后顺序,这样在搜索算法中选取第—个邻接点和下一个邻接点时可能会有不同的结果。
但是在存储结构中,明确地给出了邻接点的先后顺序,这时深度优先和广度优先遍历序列就是唯一的。
4.生成树和最小生成树
•无向图的连通分量:
无向图的连通分量是图的一个极大连通子图。
如图6-7(a)有两个连通分量,分别为图6-7(b)和(c)。
而图6-7(d)不是图6-7(a)的连通分量,因为它虽是图6-7(a)的连通子图,却不是极大连能子图,只有加上顶点V3后,才构成极大连通子图。
无向连通图只有一个连通分量,即是图本身。
•最小生成树:
设图G是一个连通网,G上的一棵各边权值之和最小的带权生成树,称为G的最小生成树。
构造最小生成树的算法有:
普里姆算法和克鲁斯卡尔算法。
5.普里姆(Prim)算法
假设N=(V,{E})是连通图,TE是N上最小生成树中边的集合。
算法从U={u0}(u0∈V),TE={}开始,重复执行下述操作:
在所有u∈U,v∈V-U的边(u,v)∈E中找一条代价最小的边{u0,v0}并入集合TE,同时v0并入U,直到U=V为止。
此时TE中必有n-1条边,则T=(V,{TE})为N的最小生成树。
6.鲁斯卡尔(Kruskal)算法
克鲁斯卡尔算法是从另一途径求网的最小生成树。
假设连通网N=(V,{E}),则令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),图中每个顶点自成一个连通分量。
在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。
依次类推,直至T中所有顶点都在同一连通分量上为止。
【例6-4】对于如图6-8所示的带权无向图,用图示说明:
(1)利用Prim算法从顶点a开始构造最小生成树的过程;
(2)利用Kruskal算法构造最小生成树的过程;
解:
(1)利用Prim算法从顶点a开始构造最小生成树的过程如图6-9所示。
(2)利用Kruskal算法构造最小生成树的过程如图6-10所示。
【例6-5】一个带权无向图的最小生成树是否一定唯一?
在什么情况下构造出的最小生成树可能不唯一?
解:
一个带权无向图的最小生成树不一定是唯一的。
从Kruskal算法构造最小生成树的过程可以看出,当从图中选择当前权值最小的边时,如果存在多条这样的边,并且这些边与已经选取的边构成回路,此时这些边就不可能同时出现在一棵最小生成树中,对这些边的不同选择结果可能会产生不同的最小生成树。
7.拓扑排序
(1)AOV网:
在有向图中以顶点表示“活动”,用有向边表示“活动”之间的优先关系,这样的有向图称为以顶点表示“活动”的网(ActivityOnVertexNetwork),简称AOV网。
(2)拓扑排序的方法
对于一个AOV网,构造其所有顶点的线性序列,使此序列不仅保持网中各顶点间原有的先后次序,而量使原来没有先后次序关系的顶点之间也建立起人为的先后关系。
这样的序列称为拓扑有序序列。
构造AOV网的拓扑有序序列的运算称为拓扑排序。
某个AOV网,如果它的拓扑有序序列被构造成功,则该网中不存在有向回路,其各子工程可按拓扑有序序列的次序进行安排。
一个AOV网的拓扑有序序列并不是唯一的。
对AOV网进行拓扑排序的步骤是:
第一步:
在网中选择一个没有前趋的顶点且输出之。
第二步:
在网中删去该顶点,并且删去从该顶点发出的全部有向边。
第三步:
重复上述两步,直到网中不存在没有前趋的顶点为止。
这样操作结果有两种;一种是网中全部顶点均被输出,说明网中不存在有向回路;另一种是网中顶点未被全部输出,剩余的顶点均有前趋顶点,说明网中存在有向回路。
拓扑排序的方法很多,主要有深度优先按索排序和广度优先搜索排序两种。
(3)广度优先搜索拓扑排序
根据拓扑排序的方法.把入度为零的顶点插入一个队列,按顺序输出。
(4)深度优先拓扑排序
根据拓扑排序的方法,先用深度优先搜索法向下走,直到无路可走为止。
每走一步都伴随着顶点进栈。
无路可走时出栈,并同时显示顶点序号。
当退回一步后,换向再走,若无向可换,则出栈,即删除无前趋的顶点。
8.掌握关键路径的概念及确定关键路径的算法
若在带权有向图G中,以顶点表示事件,边表示活动,权表示活动持续的时间,则此带权有向图称为用边表示活动的网(ActivityOnEdgenetwork),简称AOE网。
由于整个工程只有一个开始点和一个完成点,故在正常情况下,在这种工程图中只有一个入度为0的顶点(称为源点)和一个出度为0的顶点(称为汇点)。
从源点到汇点之间的长度最长的路径称为关键路径。
9.掌握最短路径的概念及确定最短路径的算法
所谓的最短路径是指对所经过的边的值之和为最小的路径。
本章给出两个算法:
一个是求从某个源点到其他顶点的最短路径,另一个是求每对顶点间的最短路径。
确定单源最短路径可采用迪杰斯特拉(Dijkstra)算法。
确定所有顶点之间的最短路径有两种方法:
一种是每次以一个顶点为源点,重复执行迪杰斯特拉算法n次,时间复杂度为O(n3);另一种是弗洛伊德(Floyd)算法,时间复杂度也是O(n3),但形式更简单。
习题6
一、单项选择题
1.在一个具有n个顶点的有向图中,若所有顶点的出度数之和为s,则所有顶点的入度数之和为( )。
A.sB.s-1C.s+1D.n
2.在一个具有n个顶点的有向图中,若所有顶点的出度数之和为s,则所有顶点的度数之和为( )。
A.sB.s-1C.s+1D.2s
3.在一个具有n个顶点的无向图中,若具有e条边,则所有顶点的度数之和为( )。
A.nB.eC.n+eD.2e
4.在一个具有n个顶点的无向完全图中,所含的边数为( )。
A.nB.n(n-1)C.n(n-1)/2D.n(n+1)/2
5.在一个具有n个顶点的有向完全图中,所含的边数为()。
A.nB.n(n-1)C.n(n-1)/2D.n(n+1)/2
6.在一个无向图中,若两顶点之间的路径长度为k,则该路径上的顶点数为()。
A.kB.k+1C.k+2D.2k
7.对于一个具有n个顶点的无向连通图,它包含的连通分量的个数为()。
A.0B.1C.nD.n+1
8.若一个图中包含有k个连通分量,若要按照深度优先搜索的方法访问所有顶点,则必须调用()次深度优先搜索遍历的算法。
A.kB.1C.k-1D.k+1
9.若要把n个顶点连接为一个连通图,则至少需要()条边。
A.nB.n+1C.n-1D.2n
10.在一个具有n个顶点和e条边的无向图的邻接矩阵中,表示边存在的元素(又称为有效元素)的个数为()。
A.nB.neC.eD.2e
11.在一个具有n个顶点和e条边的有向图的邻接矩阵中,表示边存在的元素个数为()。
A.nB.neC.eD.2e
12.在一个具有n个顶点和e条边的无向图的邻接表中,边结点的个数为()。
A.nB.neC.eD.2e
13.在一个具有n个顶点和e条边的有向图的邻接表中,保存顶点单链表的表头指针向量的大小至少为()。
A.nB.2nC.eD.2e
14.在一个无权图的邻接表表示中,每个边结点至少包含()域。
A.1B.2C.3D.4
15.对于一个有向图,若一个顶点的度为k1,出度为k2,则对应邻接表中该顶点单链表中的边结点数为()。
A.k1B.k2C.k1-k2D.k1+k2
16.对于一个有向图,若一个顶点的度为k1,出度为k2,则对应逆邻接表中该顶点单链表中的边结点数为()。
A.k1B.k2C.k1-k2D.k1+k2
17.对于一个无向图,下面()种说法是正确的。
A.每个顶点的入度等于出度B.每个顶点的度等于其入度与出度之和
C.每个顶点的入度为0D.每个顶点的出度为0
18.在一个有向图的邻接表中,每个顶点单链表中结点的个数等于该顶点的()。
A.出边数B.入边数C.度数D.度数减1
19.若一个图的边集为{(A,B),(A,C),(B,D),(C,F),(D,E),(D,F)},则从顶点A开始对该图进行深度优先搜索,得到的顶点序列可能为()。
A.A,B,C,F,D,EB.A,C,F,D,E,B
C.A,B,D,C,F,ED.A,B,D,F,E,C
20.若一个图的边集为{(A,B),(A,C),(B,D),(C,F),(D,E),(D,F)},则从顶点A开始对该图进行广度优先搜索,得到的顶点序列可能为()。
A.A,B,C,D,E,FB.A,B,C,F,D,E
C.A,B,D,C,E,FD.A,C,B,F,D,E
21.若一个图的边集为{<1,2>,<1,4>,<2,5>,<3,1>,<3,5>,<4,3>},则从顶点1开始对该图进行深度优先搜索,得到的顶点序列可能为()。
A.1,2,5,4,3B.1,2,3,4,5
C.1,2,5,3,4D.1,4,3,2,5
22.若一个图的边集为{<1,2>,<1,4>,<2,5>,<3,1>,<3,5>,<4,3>},则从顶点1开始对该图进行广度优先搜索,得到的顶点序列可能为()。
A.1,2,3,4,5B.1,2,4,3,5
C.1,2,4,5,3D.1,4,2,5,3
23.由一个具有n个顶点的连通图生成的最小生成树中,具有()条边。
A.nB.n-1C.n+1D.2n
24.已知一个有向图的边集为{,,,,,
A.a,b,c,d,eB.a,b,d,e,bC.a,c,b,e,dD.a,c,d,b,e
二、填空题
1.在一个图中,所有顶点的度数之和等于所有边数的________倍。
2.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。
3.假定一个有向图的顶点集为{a,b,c,d,e,f},边集为{,,
4.在一个具有n个顶点的无向图中,要连通所有顶点则至少需要________条边。
5.表示图的两种存储结构为__________和__________。
6.在一个连通图中存在着________个连通分量。
7.图中的一条路径长度为k,该路径所含的顶点数为________。
8.若一个图的顶点集为{a,b,c,d,e,f},边集为{(a,b),(a,c),(b,c),(d,e)},则该图含有________个连通分量。
9.对于一个具有n个顶点的图,若采用邻接矩阵表示,则矩阵大小至少为________________。
10.对于具有n个顶点和e条边的有向图和无向图,在它们对应的邻接表中,所含边结点的个数分别为________和________。
11.在有向图的邻接表和逆邻接表表示中,每个顶点邻接表分别链接着该顶点的所有________和________结点。
12.对于一个具有n个顶点和e条边的无向图,当分别采用邻接矩阵和邻接表表示时,求任一顶点度数的时间复杂度分别为________和________。
13.假定一个图具有n个顶点和e条边,则采用邻接矩阵和邻接表表示时,其相应的空间复杂度分别为________和________。
14.一个图的边集为{(a,c),(a,e),(b,e),(c,d),(d,e)},从顶点a出发进行深度优先搜索遍历得到的顶点序列为____________,从顶点a出发进行广度优先搜索遍历得到的顶点序列为____________。
15.一个图的边集为{,,
16.图的________优先搜索遍历算法是一种递归算法,图的________优先搜索遍历算法需要使用队列。
17.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数和边数分别为________和________。
18.若一个连通图中每个边上的权值均不同,则得到的最小生成树是________(唯一/不唯一)的。
19.根据图的存储结构进行某种次序的遍历,得到的顶点序列是__(唯一/不唯一)的。
20.假定一个有向图的边集为{,,
三、应用题
1.对于一个无向图6-11(a),假定采用邻接矩阵表示,试分别写出从顶点0出发按深度优先搜索遍历得到的顶点序列和按广度优先搜索遍历得到的顶点序列。
注:
每一种序列都是唯一的,因为都是在存储结构上得到的。
2.对于一个有向图6-11(b),假定采用邻接表表示,并且假定每个顶点单链表中的边结点是按出边邻接点序号从大到小的次序链接的,试分别写出从顶点0出发按深度优先搜索遍历得到的顶点序列和按广度优先搜索遍历得到的顶点序列。
注:
每一种序列都是唯一的,因为都是在存储结构上得到的。
3.已知一个无向图的邻接矩阵如图6-12(a)所示,试写出从顶点0出发分别进行深度优先和广度优先搜索遍历得到的顶点序列。
4.已知一个无向图的邻接表如图6-12(b)所示,试写出从顶点0出发分别进行深度优先和广度优先搜索遍历得到的顶点序列。
5.已知图6-13所示的一个网,按照Prim方法,从顶点1出发,求该网的最小生成树的产生过程。
6.已知图6-13所示的一个网,按照Kruskal方法,求该网的最小生成树的产生过程。
7.图6-14所示为一个有向网图及其带权邻接矩阵,要求对有向图采用Dijkstra算法,求从V0到其余各顶点的最短路径。
8.图6-15给出了一个具有15个活动、11个事件的工程的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 排序 习题 参考答案