ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:146.90KB ,
资源ID:5366229      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5366229.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第七章图习题数据结构.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第七章图习题数据结构.docx

1、第七章图习题数据结构习题七 图一、单项选择题1.设有无向图G=(V,E)和G=(V,E),如G为G的生成树,则下面不正确的说法是( )AG为G的子图 BG为G的连通分量 CG为G的极小连通子图且V=V DG是G的无环子图2.任何一个带权的无向连通图的最小生成树( )A只有一棵 B有一棵或多棵 C一定有多棵 D可能不存在3以下说法正确的是( )A连通分量是无向图中的极小连通子图。B强连通分量是有向图中的极大强连通子图。C在一个有向图的拓扑序列中,若顶点a在顶点b之前,则图中必有一条弧。D对有向图G,如果从任意顶点出发进行一次深度优先或广度优先搜索能访问到每个顶点,则该图一定是完全图。4图中有关路

2、径的定义是( )。A由顶点和相邻顶点序偶构成的边所形成的序列 B由不同顶点所形成的序列C由不同边所形成的序列 D上述定义都不是5设无向图的顶点个数为n,则该图最多有( )条边。An-1 Bn(n-1)/2 C n(n+1)/2 D0 En26要连通具有n个顶点的有向图,至少需要( )条边。An-l Bn Cn+l D2n7在一个无向图中,所有顶点的度数之和等于所有边数( )倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的( )倍。A1/2 B2 C1 D48下列哪一种图的邻接矩阵是对称矩阵?( )A有向图 B无向图 CAOV网 DAOE网9. 下列说法不正确的是( )。A图的遍历是

3、从给定的源点出发每一个顶点仅被访问一次 B遍历的基本算法有两种:深度遍历和广度遍历 C图的深度遍历不适用于有向图D图的深度遍历是一个递归过程10下面哪一方法可以判断出一个有向图是否有环(回路): A深度优先遍历 B. 拓扑排序 C. 求最短路径 D. 求关键路径11. 在图采用邻接表存储时,求最小生成树的 Prim 算法的时间复杂度为( )。A. O(n) B. O(n+e) C. O(n2) D. O(n3)12已知有向图G=(V,E),其中V=V1,V2,V3,V4,V5,V6,V7,E=,G的拓扑序列是( )。AV1,V3,V4,V6,V2,V5,V7 BV1,V3,V2,V6,V4,V

4、5,V7CV1,V3,V4,V5,V2,V6,V7 DV1,V2,V5,V3,V4,V6,V713. 在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是( )。 AG中有弧 BG中有一条从Vi到Vj的路径 CG中没有弧 DG中有一条从Vj到Vi的路径 14. 关键路径是事件结点网络中( )。A从源点到汇点的最长路径 B从源点到汇点的最短路径C最长回路 D最短回路15下列关于AOE网的叙述中,不正确的是( )。A关键活动不按期完成就会影响整个工程的完成时间B任何一个关键活动提前完成,那么整个工程将会提前完成C所有的关键活动提前完成,那么整个工程将会提前完成D某些关键活动提

5、前完成,那么整个工程将会提前完成二、填空题1具有10个顶点的无向图,边的总数最多为_。2. 设无向图 G 有n 个顶点和e 条边,每个顶点Vi 的度为di(1=i=n),则e=_3. 在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要_条弧。4下图中的强连通分量的个数为_个。5N个顶点的连通图用邻接矩阵表示时,该矩阵至少有_个非零元素。6. 在有向图的邻接矩阵表示中,计算第I个顶点入度的方法是_ _。7. 对于一个具有n个顶点e条边的无向图的邻接表的表示,则表头向量大小为_,邻接表的边结点个数为_。8. 已知一无向图G=(V,E),其中V=a,b,c,d,e E=(a,b),(a

6、,d),(a,c),(d,c),(b,e)现用某一种图遍历方法从顶点a开始遍历图,得到的序列为abecd,则采用的是_遍历方法。9构造连通网最小生成树的两个典型算法是_ _。10. 有向图G可拓扑排序的判别条件是_ _。11. Dijkstra最短路径算法从源点到其余各顶点的最短路径的路径长度按_ _次序依次产生,该算法弧上的权出现_ _情况时,不能正确产生最短路径。12.有向图G=(V,E),其中 V(G)=0,1,2,3,4,5,用三元组表示弧及弧上的权d.E(G)为,,则从源点0到顶点3的最短路径长度是_,经过的中间顶点是_ _。13AOV网中,结点表示_,边表示_。AOE网中,结点表示

7、_,边表示_。14在AOE网中,从源点到汇点路径上各活动时间总和最长的路径称为_ _。15在 AOV网 中,存在环意味着_ _,这是_ _的;对程序的数据流图来说,它表明存在_ _。16如下为拓扑排序的C程序,(1)列出对右图执行该程序后的输出结果。_ _(2)在程序空白处填上适当语句。void topsort(hdnodes graph ,int n)int i,j,k,top; node_pointer ptr ; top=-1; for (i=0; in; i+) if (!graphi.count)graphi.count=top; top=i; for (i=0; ilink)k=p

8、tr-vertex; graphk.count-; if(3)_ _) graphk.count=top; top=k; 三、应用题1已知如图所示的有向图,请给出该图的: (1) 每个顶点的入度、出度;(2) 邻接矩阵;(3) 邻接表;(4) 逆邻接表;(5) 强连通分量。2已知图的邻接矩阵为:V1V2V3V4V5V6V7V8V9V10V10111000000V20001100000V30001010000V40000011010V50000001000V60000000110V70000000010V80000000001V90000000001V100000000000当用邻接表作为图的存

9、储结构,且邻接表都按序号从大到小排序时,试写出:(1)以顶点V1为出发点的唯一的深度优先遍历;(2)以顶点V1为出发点的唯一的广度优先遍历;(3)该图唯一的拓扑有序序列。3已知一个无向图如下图所示,要求分别用Prim和Kruskal算法生成最小树(假设以为起点,试画出构造过程)。 4已知世界六大城市为:北京(Pe)、纽约(N)、巴黎(Pa)、 伦敦(L) 、 东京(T) 、 墨西哥(M),下表给定了这六大城市之间的交通里程: 世界六大城市交通里程表(单位:百公里)penpaLTMPe109828121124N109585510832PA825839792L815539589T211089795

10、113M124329289113(1)画出这六大城市的交通网络图;(2)画出该图的邻接表表示法;(3)画出该图按权值递增的顺序来构造的最小(代价)生成树.5下表给出了某工程各工序之间的优先关系和各工序所需时间(1)画出相应的AOE网 (2)列出各事件的最早发生时间,最迟发生时间(3)找出关键路径并指明完成该工程所需最短时间. 工序代号 A B C D E F G H I J K L M N 所需时间 15 10 50 8 15 40 300 15 120 60 15 30 20 40 先驱工作 - - A,B B C,D B E G,I E I F,I H,J,K L G 四、算法设计题1已知

11、有向图有n个顶点,请写算法,根据用户输入的偶对建立该有向图的邻接表。即接受用户输入的(以其中之一为0标志结束),对于每条这样的边,申请一个结点,并插入到的单链表中,如此反复,直到将图中所有边处理完毕。提示:先产生邻接表的n个头结点(其结点数值域从1到n)。2设已给出图的邻接矩阵,要求将邻接矩阵转换为邻接表。3已知无向图采用邻接表存储方式,试写出删除边(i,j)的算法。4假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可)。(注:图中不存在顶点到自己的弧)5给定n个村庄之间的交通图,若村庄i和j之间有道路,则将

12、顶点i和j用边连接,边上的Wij表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法,并应用该算法解答如图所示的实例。 6对于一个使用邻接表存储的有向图G,可以利用深度优先遍历方法,对该图中结点进行拓扑排序。其基本思想是:在遍历过程中,每访问一个顶点,就将其邻接到的顶点的入度减一,并对其未访问的、入度为0的邻接到的顶点进行递归。(1)给出完成上述功能的图的邻接表定义(结构)。(2)定义在算法中使用的全局辅助数组。(3)写出在遍历图的同时进行拓扑排序的算法。 第七章 图一、单项选择题1.B2

13、.B3B4A5B6B7B C8B9C10B11. B12A13. D14. A15B二、填空题1452. 略3. n4352(N-1)6. 第I列非零元素个数7. n 2e8. 深度优先9普里姆(prim)算法和克鲁斯卡尔(Kruskal)算法10. 不存在环11. 递增 负值12. 50,经过中间顶点13.(1)活动 (2)活动间的优先关系 (3)事件 (4)活动 边上的权代表活动持续时间14关键路径15(1)某项活动以自己为先决条件 (2)荒谬 (3)死循环161)V1 V4 V3 V6 V2 V5(尽管图以邻接表为存储结构,但因没规定邻接点的排列,所以结果是不唯一的。本答案是按邻接点升序

14、排列给出的。)(2) top=-1 top=graphj.count graphk.count=0三、应用题1【解答】 (1)顶点 入度 出度 1 3 0 2 2 2 3 1 2 4 1 3 5 2 1 6 2 3(2) 邻接矩阵 (3)邻接表(4)逆邻接表(5)强连通分量2略3为节省篇幅,这里仅用Kruskal算法,构造最小生成树过程如下:(下图也可选(2,4)代替(3,4),(5,6)代替(1,5))4(1) (2)略(3)最小生成树6个顶点5条边:V(G)=Pe,N,Pa,L,T,ME(G)=(L,Pa,3),(Pe,T,21),(M,N,32),(L,N,55),(L,Pe,81)5(

15、1)AOE网图略 (2)各事件发生的最早和最晚时间如下表 事 件123456789101112最早发生时间01510655080200380395425445420最晚发生时间015576538080335380395425445425 (3)关键路径为顶点序列:1-2-4-6-8-9-10-11;事件序列:A-C-E-G-H-L-M,完成工程所需的最短时间为445。四、算法设计题1 void CreatAdjList(AdjList g)/建立有向图的邻接表存储结构int n;scanf(%d,&n);for (i=1;iadjvex=j; p-next=gi.firstarc; gi.fi

16、rstarc=p;scanf(&v1,&v2); 2void AdjMatrixToAdjList( AdjMatrix gm, AdjList gl )/将图的邻接矩阵表示法转换为邻接表表示法。for (i=1;i=n;i+) /邻接表表头向量初始化。 scanf(&gli.vertex); gli.firstarc=null; for (i=1;i=n;i+) for (j=1;jadjvex=j;/顶点I的邻接点是jp-next=gli.firstarc; gli.firstarc=p; /链入顶点i的邻接点链表中 /end算法讨论 算法中邻接表中顶点在向量表中的下标与其在邻接矩阵中的行

17、号相同。3void DeletEdge(AdjList g,int i,j) /在用邻接表方式存储的无向图g中,删除边(i,j)p=gi.firstarc; pre=null; /删顶点i 的边结点(i,j),pre是前驱指针while (p) if (p-adjvex=j) if(pre=null)gi.firstarc=p-next;else pre-next=p-next;free(p);/释放结点空间。 else pre=p; p=p-next; /沿链表继续查找p=gj.firstarc; pre=null; /删顶点j 的边结点(j,i)while (p) if (p-adjvex

18、=i) if(pre=null)gj.firstarc=p-next;else pre-next=p-next;free(p);/释放结点空间。 else pre=p; p=p-next; /沿链表继续查找 / DeletEdge算法讨论 算法中假定给的i,j 均存在,否则应检查其合法性。若未给顶点编号,而给出顶点信息,则先用顶点定位函数求出其在邻接表顶点向量中的下标i和j。4题目分析有向图判断回路要比无向图复杂。利用深度优先遍历,将顶点分成三类:未访问;已访问但其邻接点未访问完;已访问且其邻接点已访问完。下面用0,1,2表示这三种状态。前面已提到,若dfs(v)结束前出现顶点u到v的回边,则

19、图中必有包含顶点v和u的回路。对应程序中v的状态为1,而u是正访问的顶点,若我们找出u的下一邻接点的状态为1,就可以输出回路了。void Print(int v,int start ) /输出从顶点start开始的回路。for(i=1;i=n;i+) if(gvi!=0 & visitedi=1 ) /若存在边(v,i),且顶点i的状态为1。 printf(“%d”,v); if(i=start) printf(“n”); else Print(i,start);break;/if /Printvoid dfs(int v) visitedv=1;for(j=1;j=n;j+ ) if (gv

20、j!=0) /存在边(v,j) if (visitedj!=1) if (!visitedj) dfs(j); /if else cycle=1; Print(j,j); visitedv=2;/dfsvoid find_cycle() /判断是否有回路,有则输出邻接矩阵。visited数组为全局变量。 for (i=1;i=n;i+) visitedi=0; for (i=1;i=n;i+ ) if (!visitedi) dfs(i);/find_cycle5题目分析 该题可用求每对顶点间最短路径的FLOYD算法求解。求出每一顶点(村庄)到其它顶点(村庄)的最短路径。在每个顶点到其它顶点的

21、最短路径中,选出最长的一条。因为有n个顶点,所以有n条, 在这n条最长路径中找出最短一条,它的出发点(村庄)就是医院应建立的村庄。 void Hospital(AdjMatrix w,int n) /在以邻接带权矩阵表示的n个村庄中,求医院建在何处,使离医院最远的村庄到医院的路径最短。 for (k=1;k=n;k+) /求任意两顶点间的最短路径 for (i=1;i=n;i+) for (j=1;j=n;j+) if (wik+wkjwij) wij=wik+wkj; m=MAXINT; /设定m为机器内最大整数。 for (i=1;i=n;i+) /求最长路径中最短的一条。 s=0; fo

22、r (j=1;j=n;j+) /求从某村庄i(1=is) s=wij; if (sadjvex; if (visitedj=1 & finishedj=0) flag=0 /dfs结束前出现回边 else if(visitedj=0) dfs(g,j); finishedj=1; /if p=p-next; /whilet=(ArcNode *)malloc(sizeof(ArcNode);/申请边结点 t-adjvex=v; t-next=final; final=t; /将该顶点插入链表 /dfs结束 int dfs-Topsort(Adjlist g) /对以邻接表为存储结构的有向图进行拓扑排序,拓扑排序成功返回1,否则返回0 i=1; while (flag & i =n) if (visitedi=0) dfs(g,i); finishedi=1; /if return(flag); / dfs-Topsort

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1