数据结构第七章图
- 格式:docx
- 大小:177.83 KB
- 文档页数:12
第七章图(参考答案)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.1 选择题1. 对于一个具有n个顶点和e条边的有向图,在用邻接表表示图时,拓扑排序算法时间复杂度为()A) O(n)B)O(n+e)C) O(n*n)D)O(n*n*n)【答案】B2. 设无向图的顶点个数为n,则该图最多有()条边。
A) n-1B)n(n-1)/2C)n(n+1)/2【答案】B3. 连通分量指的是()A) 无向图中的极小连通子图B) 无向图中的极大连通子图C) 有向图中的极小连通子图D) 有向图中的极大连通子图【答案】B4. n 个结点的完全有向图含有边的数目()A) n*n B) n(n+1) C) n/2【答案】D5. 关键路径是()A) AOE网中从源点到汇点的最长路径B) AOE网中从源点到汇点的最短路径C) AOV网中从源点到汇点的最长路径D) n2D) n* (n-1)D) AOV网中从源点到汇点的最短路径【答案】 A 6.有向图中一个顶点的度是该顶点的()A)入度B)出度C)入度与出度之和D)(入度+出度)12【答案】C7.有e 条边的无向图,若用邻接表存储,表中有()边结点。
A) e B) 2eC) e-1D) 2(e-1)【答案】B8.实现图的广度优先搜索算法需使用的辅助数据结构为()A)栈B)队列C)二叉树D)树【答案】B9.实现图的非递归深度优先搜索算法需使用的辅助数据结构为()A)栈B)队列C)二叉树D)树【答案】 A 10.存储无向图的邻接矩阵一定是一个()A)上三角矩阵B)稀疏矩阵C)对称矩阵D)对角矩阵【答案】C11.在一个有向图中所有顶点的入度之和等于出度之和的()倍A) B) 1C) 2D) 4答案】B12.在图采用邻接表存储时,求最小生成树的Prim 算法的时间复杂度为( A) O(n)B) O(n+e)C 0(n2)D) 0(n3))【答案】B13 .下列关于AOE网的叙述中,不正确的是()A) 关键活动不按期完成就会影响整个工程的完成时间B) 任何一个关键活动提前完成,那么整个工程将会提前完成C) 所有的关键活动提前完成,那么整个工程将会提前完成D) 某些关键活动提前完成,那么整个工程将会提前完成【答案】B14. 具有10 个顶点的无向图至少有多少条边才能保证连通()A ) 9B) 10C) 11D) 12【答案】A15. 在含n 个顶点和e 条边的无向图的邻接矩阵中,零元素的个数为()A)e B)2eC)n2-e D)n2-2e【答案】D7.2 填空题1 .无向图中所有顶点的度数之和等于所有边数的 _______________ 倍。
第七章 图一、写出如下有向图的邻接矩阵及图中各顶点的入度、出度和度。
【分析】有向图中顶点的度=顶点的入度+顶点的出度。
【参考答案】邻接矩阵:⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡010*******010101000000110 顶点a;入度1,出度2,度3;顶点b;入度2,出度1,度3;顶点c;入度1,出度2,度3;顶点d;入度2,出度1,度3;顶点e;入度1,出度1,度2。
二、设如下有向网以邻接表形式存储,画出其存储结构示意图。
【分析】表结点中应含三个域:邻接到顶点的下标域、权值域和指向下一表结点的指针域。
【参考答案】三、写出对如下无向图从顶点a出发进行广度优先遍历可能得到的所有遍历序列。
【分析】广度优先遍历中应保证先被访问的顶点的邻接点先于后被访问的顶点的邻接点处理。
图中各顶点间并无必然的先后顺序。
各顶点的邻接点间也并无必然的先后顺序。
【参考答案】abcdefgabdcegfacbdfegacdbfgeadbcgefadcbgfe四、设有无向网如下,写出其邻接矩阵,并在此基础上按普里姆算法求最小生成树。
【分析】【参考答案】邻接矩阵:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞6456252363794567555553955434最小生成树:五、写出对如下有向无环图进行拓扑排序可能得到的所有拓扑序列。
【分析】每次输出一个入度为0的顶点。
【参考答案】abcdefgabcdfegabcfdeg六、设有AOE网如下,试求关键路径。
【分析】【参考答案】关键路径1:v1→v2→v5→v7关键路径2:v1→v3→v6→v7七、设有向网如下,用迪杰斯特拉算法求从顶点a出发到其余各顶点的最短路径。
【分析】【参考答案】ab:3af:5afe:7afec:8afecd:10八、编写算法,由依次输入的顶点数、弧数、各顶点信息和各条弧信息建立有向图的邻接表。
第7 章图一、基础知识题7.1设无向图的顶点个数为n,则该图最多有多少条边?【解答】n(n-1)/27.2一个n个顶点的连通无向图,其边的个数至少为多少?【解答】n-17.3要连通具有n个顶点的有向图,至少需要多少条弧?【解答】n7.4 n个顶点的完全有向图含有弧的数目是多少?【解答】n(n-1)7.5一个有n个顶点的无向图,最少有多少个连通分量,最多有多少个连通分量。
【解答】1, n7.6图的BFS生成树的树高要小于等于同图DFS生成树的树高,对吗?【解答】对7.7无向图G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},写出对该图从顶点a出发进行深度优先遍历可能得到的全部顶点序列。
【解答】abedfc, acfdeb, aebdfc, aedfcb7.8 在图采用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度是多少?【解答】O(n+e)7.9若一个具有n个顶点,e条边的无向图是一个森林,则该森林中必有多少棵树?【解答】n-e7.10 n个顶点的无向图的邻接矩阵至少有多少非零元素?【解答】07.11证明:具有n个顶点和多于n-1条边的无向连通图G一定不是树。
【证明】具有n个顶点n-1条边的无向连通图是自由树,即没有确定根结点的树,每个结点均可当根。
若边数多于n-1条,因一条边要连接两个结点,则必因加上这一条边而使两个结点多了一条通路,即形成回路。
形成回路的连通图不再是树。
7.12证明对有向图顶点适当编号,使其邻接矩阵为下三角形且主对角线为全零的充要条件是该图是无环图。
【证明】该有向图顶点编号的规律是让弧尾顶点的编号大于弧头顶点的编号。
由于不允许从某顶点发出并回到自身顶点的弧,所以邻接矩阵主对角元素均为0。
先证明该命题的充分条件。
由于弧尾顶点的编号均大于弧头顶点的编号,在邻接矩阵中,非零元素(A[i][j]=1)自然是落到下三角矩阵中;命题的必要条件是要使上三角为0,则不允许出现弧头顶点编号大于弧尾顶点编号的弧,否则,就必然存在环路。
数据结构习题(图)一、选择题1.设完全无向图的顶点个数为n,则该图有( B )条边。
A. n-lB. n(n-l)/2C.n(n+l)/2D. n(n-l)2.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。
A.3B.2C.1D.1/23.有向图的一个顶点的度为该顶点的( )。
A.入度B. 出度C.入度与出度之和D.(入度+出度)/24.在无向图G (V,E)中,如果图中任意两个顶点vi、vj (vi、vj∈V,vi≠vj)都的,则称该图是( )。
A.强连通图B.连通图C.非连通图D.非强连通图5.若采用邻接矩阵存储具有n个顶点的一个无向图,则该邻接矩阵是一个( )。
A.上三角矩阵B.稀疏矩阵C.对角矩阵D.对称矩阵6.若采用邻接矩阵存储具有n个顶点的一个有向图,顶点vi的出度等于邻接矩阵A.第i列元素之和B.第i行元素之和减去第i列元素之和C.第i行元素之和D.第i行元素之和加上第i列元素之和7.对于具有e条边的无向图,它的邻接表中有( )个边结点。
A.e-lB.eC.2(e-l)D. 2e8.对于含有n个顶点和e条边的无向连通图,利用普里姆Prim算法产生最小生成时间复杂性为( ),利用克鲁斯卡尔Kruskal算法产生最小生成树(假设边已经按权的次序排序),其时间复杂性为( )。
A. O(n2)B. O(n*e)C. O(n*logn)D.O(e)9.对于一个具有n个顶点和e条边的有向图,拓扑排序总的时间花费为O( )A.nB.n+lC.n-lD.n+e10.在一个带权连通图G中,权值最小的边一定包含在G的( )生成树中。
A.最小B.任何C.广度优先D.深度优先二、填空题1.在一个具有n个顶点的无向完全图中,包含有____条边;在一个具有n个有向完全图中,包含有____条边。
2.对于无向图,顶点vi的度等于其邻接矩阵____ 的元素之和。
3.对于一个具有n个顶点和e条边的无向图,在其邻接表中,含有____个边对于一个具有n个顶点和e条边的有向图,在其邻接表中,含有_______个弧结点。
4.十字链表是有向图的另一种链式存储结构,实际上是将_______和_______结合起来的一种链表。
5.在构造最小生成树时,克鲁斯卡尔算法是一种按_______的次序选择合适的边来构造最小生成树的方法;普里姆算法是按逐个将_______的方式来构造最小生成树的另一种方法。
6.对用邻接表表示的图进行深度优先遍历时,其时间复杂度为一;对用邻接表表示的图进行广度优先遍历时,其时间复杂度为_______。
7.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数为_______ ,边数为_______。
8.在执行拓扑排序的过程中,当某个顶点的入度为零时,就将此顶点输出,同时将该顶点的所有后继顶点的入度减1。
为了避免重复检测顶点的入度是否为零,需要设立一个____来存放入度为零的顶点。
三、简答题l.回答以下问题:(1)有n个顶点的无向连通图最多需要多少条边?最少需要多少条边?(2)表示一个具有1000个顶点、1000条边的无向图的邻接矩阵有多少个矩阵元素?有多少非零元素?是否为稀疏矩阵?2.题图7-1为一有向图,按要求回答问题:(1)写出各顶点的入度、出度和度。
(2)给出该图的邻接矩阵。
(3)给出该图的邻接表。
(4)给出该图的十字链表。
3.题图7-2为一无向图,请按要求回答问题:(1)画出该图的邻接表。
(2)画出该图的邻接多重表。
(3)分别写出从顶点1出发按深度优先搜索遍历算法得到的顶点序列和按广度优先搜索遍历算法得到的顶点序列。
4.题图7-3为一带权无向图,请按要求回答问题。
(1)画出该图的邻接矩阵,并按普里姆算法求其最小生成树。
(2)画出该图的邻接表,并按克鲁斯卡尔算法求其最小生成树。
5.题图7-4是一带权有向图,试采用狄杰斯特拉Dijkstra算法求从顶点1到其他各项点的最短路径,要求给出整个计算过程。
6.题图7-5为一个带权有向图(1)给出该图的邻接矩阵。
(2)请用弗洛伊德算法求出各顶点对之间的最短路径长度,要求写出其相应的矩阵序列。
7.对于有向无环图,(1)叙述求拓扑有序序列的步骤。
(2)对于题图7-6所示的有向图,写出它的4个不同的拓扑有序序列。
8.题图7-7是一个AOE网,试求:(1)每项活动的最早开始时间和最迟开始时间。
(2)完成整个工程至少需要多少天。
(3)哪些是关键活动。
(4)是否存在某些活动,当提高其速度后能使整个工期缩短。
四、算法设计题1.编写一个算法,判断图G中是否存在从顶点v i到v j的长度为k的简单路径。
2.以邻接表作为图的存储结构,编写实现连通图G的深度优先搜索遍历(从顶点v 出发)的非递归函数。
3.给定n个村庄之间的交通图。
若村庄i与村庄j之间有路可通,则将顶点i与顶点j之间用边连接,边上的权值Wij表示这条道路的长度。
现打算在这n个村庄中选定一个村庄建一所医院。
试编写一个算法,求出该医院应建在哪个村庄,才能使距离医院最远的村庄到医院的路程最短。
4.编写一个函数,计算给定的有向图的邻接矩阵的每对顶点之间的最短路径。
第七章图第7章图一、选择题(参考答案):1.B 2.B 3.C 4.B 5.D6. C 7.D 8.A,D 9.D 10.A二、填空题(参考答案)1.n(n-l)/2, n(n-l)。
2.第i行。
3. 2e, e0 4.邻接表,逆邻接表。
5.权值递增,顶点连通。
6.O(e),O(e)。
7.n,n-l。
8.栈。
三、简答题1.回答以下问题:(1)有n个顶点的无向连通图最多需要多少条边?最少需要多少条边?(2)表示一个具有1000个顶点、1000条边的无向图的邻接矩阵有多少个矩阵元素?有多少非零元素?是否为稀疏矩阵?【解答】(l)有n个顶点的无向连通图最多有n(n-l)/2条边(构成一个无向完全图的情况);最少有n-l条边(n个顶点是连通的)。
(2)这样的矩阵共有lOOO*1000=1000000个矩阵元素,因为有1000条边,所以有2000非零元素,因此该矩阵是稀疏矩阵。
2.题图7-1为一有向图,按要求回答问题:题图7-1(1)写出各顶点的入度、出度和度。
(2)给出该图的邻接矩阵。
(3)给出该图的邻接表。
(4)给出该图的十字链表。
【解答】(l)各顶点入度、出度和度如下表所示。
(2)邻接矩阵如下所示。
0 0 0 0 0 01 0 0 1 0 00 1 0 0 0 10 0 1 0 1 11 0 0 0 0 01 1 0 0 1 0(3)邻接表如下所示。
(4)十字接表如下所示。
3.题图7-2为一无向图,请按要求回答问题:(1)画出该图的邻接表。
(2)画出该图的邻接多重表。
(3)分别写出从顶点l出发按深度优先搜索遍历算法得到的顶点序列和按广度优先搜索遍历算法得到的顶点序列。
题图7-2【解答】(1)邻接表如下所示。
(2)多重邻接表如下所示。
(3)从顶点1出发,深度优先搜索遍历序列为:123456;广度优先搜索遍历序列为:123 564。
4.题图7-3为一带权无向图,请按要求回答问题:(1)画出该图的邻接矩阵,并按普里姆算法求其最小生成树。
(2)画出该图的邻接表,并按克鲁斯卡尔算法求其最小生成树。
【解答】(1)按普里姆算法其最小生成树如下所示。
(2)按克鲁斯卡尔算法其最小生成树如下所示。
5.题图7-4是一带权有向图,试采用狄杰斯特拉Dijkstra算法求从顶点l到其他各顶点的最短路径,要求给出整个计算过程。
【解答】(1)初值:s[]={1),dist[]={0,20,15,∞,∞,∞}(顶点1到其他各项点的权值),path[]={1,1,1,-l,-1,-1)(顶点l到其他各项点有弧存在时为1,否则为-1)。
(2)在V-S中找最近(dist[]最小)的顶点3,加入S中,即s[]={l,3),并重新计算顶点l到达顶点2,4,5和6的距离,修改相应的dist值:dist[2]=min{dist[2], dist[3]+cost[3][2]}=min{20, 15+4}=19;dist[6l=min{dist[6], dist[3]+cost[3][6]}==Inin{∞,15+10}=25;则有dist[]={0,19,15,∞,∞,25},path[]={l,3,1,-l,-l,3}。
(3)在V-S中找出最近的顶点4,加入S中,即s[]={1,3,2},并重新计算顶点1到达顶点4,5和6的距离,修改相应的dist值:dist[5]-min{dist[5], dist[2]+ cost[2][5])-min{∞,19+10}=29,则有dist[]={0,19,15, ∞,29,25),path[]={l,3,l,-1,2,3}.(4)在V-S中找出最近的顶点6,加入S中,即s[].{1,3,2,6),并重新计算顶点l 到达顶点4和5的距离,修改相应的dist值:dist[4]=min{dist[4], dist[6]+cost[6][4])=min{∞..,25+4}=29,则有dist[]={0, 19, 15, 29, 29, 25}, path[]={l,3,1,6,2,3}。
(5)在V-S中找出最近的顶点4,加入S中,即s[]:{l,3,2,6,4},并重新计算顶点l到达顶点5的距离,此时不需要修改dist值,则有dist[]={0,19,15,29,29,25),path[]={l,3, l,6,2, 3}。
(6)在V-S中找出最近的顶点5,加入S中,即s口={l,3,2,6,4,5}。
此时S中包含了图的所有顶点,算法结束。
最终dist[]={0,19,15,29,29,25),path[]={1,3,l,6,2, 3}。
由此得到:从顶点1到顶点2的最短路径长度为:19 最短路径为:2<-3<-1从顶点l到顶点3的最短路径长度为:15 最短路径为:3<-1从顶点l到顶点4的最短路径长度为:29 最短路径为:4<-6<-3<-1从顶点l到顶点5的最短路径长度为:29 最短路径为:5<-2<-3<-l从顶点l到顶点6的最短路径长度为:25 最短路径为:6<-3<-16.题图7-5为一个带权有向图,(1)给出该图的邻接矩阵。
(2)请用弗洛伊德算法求出各顶点对之间的最短路径长度,要求写出其相应的矩阵序列。
【解答】(1)邻接矩阵如下:0 10 ∞∞15 0 6 ∞3 ∞ 0 4∞ 8 2 0(2)采用弗洛伊德算法求最短路径的过程如下:7.对于有向无环图,(1)叙述求拓扑有序序列的步骤。
(2)对于题图7-6所示的有向图,写出它的4个不同的拓扑有序序列。