收藏 分享(赏)

《数据结构》习题汇编07 第七章 图 试题.doc

上传人:精品资料 文档编号:10385544 上传时间:2019-11-05 格式:DOC 页数:24 大小:442KB
下载 相关 举报
《数据结构》习题汇编07 第七章 图 试题.doc_第1页
第1页 / 共24页
《数据结构》习题汇编07 第七章 图 试题.doc_第2页
第2页 / 共24页
《数据结构》习题汇编07 第七章 图 试题.doc_第3页
第3页 / 共24页
《数据结构》习题汇编07 第七章 图 试题.doc_第4页
第4页 / 共24页
《数据结构》习题汇编07 第七章 图 试题.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、1第七章 图 试题一、单项选择题1. 在无向图中定义顶点的度为与它相关联的( )的数目。A. 顶点 B. 边 C. 权 D. 权值2. 在无向图中定义顶点 vi与 vj之间的路径为从 vi到达 vj的一个( ) 。A. 顶点序列 B. 边序列 C. 权值总和 D. 边的条数3. 图的简单路径是指( )不重复的路径。A. 权值 B. 顶点 C. 边 D. 边与顶点均4. 设无向图的顶点个数为 n,则该图最多有( )条边。A. n-1 B. n(n-1)/2 C. n(n+1)/2 D. n(n-1)5. n 个顶点的连通图至少有( )条边。A. n-1 B. n C. n+1 D. 06. 在一

2、个无向图中,所有顶点的度数之和等于所有边数的 ( ) 倍。A. 3 B. 2 C. 1 D. 1/27. 若采用邻接矩阵法存储一个 n 个顶点的无向图,则该邻接矩阵是一个 ( )。A. 上三角矩阵 B. 稀疏矩阵 C. 对角矩阵 D. 对称矩阵8. 图的深度优先搜索类似于树的( )次序遍历。A. 先根 B. 中根 C. 后根 D. 层次9. 图的广度优先搜索类似于树的( )次序遍历。A. 先根 B. 中根 C. 后根 D. 层次10.在用 Kruskal 算法求解带权连通图的最小(代价)生成树时,通常采用一个( )辅助结构,判断一条边的两个端点是否在同一个连通分量上。A. 位向量 B. 堆 C

3、. 并查集 D. 生成树顶点集合11.在用 Kruskal 算法求解带权连通图的最小(代价)生成树时,选择权值最小的边的原则是该边不能在图中构成( ) 。A. 重边 B. 有向环 C. 回路 D. 权值重复的边12.在用 Dijkstra 算法求解带权有向图的最短路径问题时,要求图中每条边所带的权值必须是( ) 。A. 非零 B. 非整 C. 非负 D. 非正13.在一个连通图中进行深度优先搜索得到一棵深度优先生成树,树根结点是关节点的充要条件是它至少有( )子女。2A. 1 B. 2 C. 3 D. 014.设有向图有 n 个顶点和 e 条边,采用邻接表作为其存储表示,在进行拓扑排序时,总的

4、计算时间为( ) 。A. O(nlog2e) B. O(n+e) C. O(ne) D. O(n2)15.设有向图有 n 个顶点和 e 条边,采用邻接矩阵作为其存储表示,在进行拓扑排序时,总的计算时间为( ) 。A. O(nlog2e) B. O(n+e) C. O(ne) D. O(n2)16.设 G1 = (V1, E1) 和 G2 = (V2, E2) 为两个图,如果 V1 V2,E1 E2,则称( ) 。A. G1 是 G2 的子图 B. G2 是 G1 的子图C. G1 是 G2 的连通分量 D. G2 是 G1 的连通分量17.有向图的一个顶点的度为该顶点的( ) 。A. 入度 B

5、. 出度C. 入度与出度之和 D. (入度出度)218.一个连通图的生成树是包含图中所有顶点的一个( )子图。A. 极小 B. 连通 C. 极小连通 D. 无环19.n (n1) 个顶点的强连通图中至少含有( )条有向边。A. n-1 B. n n(n-1)/2 D. n(n-1)20.在一个带权连通图 G 中,权值最小的边一定包含在 G 的( )生成树中。A. 某个最小 B. 任何最小 C. 广度优先 D.深度优先21.对于具有 e 条边的无向图,它的邻接表中有( )个边结点。A. e-1 B. e C. 2(e-1) D. 2e22.对于如图所示的带权有向图,从顶点 1 到顶点 5 的最短

6、路径为( ) 。A.1, 4, 5 B. 1, 2, 3, 5 C. 1, 4, 3, 5 D. 1, 2, 4, 3, 523.具有 n 个顶点的有向无环图最多可包含( )条有向边。A. n-1 B. n C. n(n-1)/2 D.n(n-1)24.一个有 n 个顶点和 n 条边的无向图一定是( ) 。A. 连通的 B. 不连通的 C. 无环的 D. 有环的25.在 n 个顶点的有向无环图的邻接矩阵中至少有( )个零元素。A. n B. n(n-1)/2 C. n(n+1)/2 D. n(n-1)1261 381955412 3326.对于有向图,其邻接矩阵表示比邻接表表示更易于( ) 。

7、A. 求一个顶点的度 B. 求一个顶点的邻接点C. 进行图的深度优先遍历 D. 进行图的广度优先遍历27.在一个有向图的邻接矩阵表示中,删除一条边需要耗费的时间是( ) 。A. O(1) B. O(i) C. O(j) D. O(i+j)28.与邻接矩阵相比,邻接表更适合于存储( )图。A. 无向 B.连通 C.稀疏 D. 稠密图29.设一个有 n 个顶点和 e 条边的有向图采用邻接矩阵表示,要计算某个顶点的出度所耗费的时间是( ) 。A. O(n) B. O(e) C. O(n+e) D. O(n2)30.为了实现图的广度优先遍历,BFS 算法使用的一个辅助数据结构是( ) 。A. 栈 B.

8、 队列 C. 二叉树 D. 树参考答案: 1. B 2. A 3. B 4. B 5. A 6. B 7. D 8. A 9. D 10. C11.C 12. C 13. B 14. B 15. D16. A 17. C 18. C 19. B 20. A21. D 22. D 23. C 24. D 25. C26. A 27. A 28. C 29. A 30. B 二、填空题1. 图的定义包含一个顶点集合和一个边集合。其中,顶点集合是一个有穷_集合。2. 用邻接矩阵存储图,占用存储空间数与图中顶点个数_关,与边数_关。3. n (n0) 个顶点的无向图最多有_ 条边,最少有_条边。4.

9、n (n0) 个顶点的连通无向图最少有_ 条边。5. 若 3 个顶点的图 G 的邻接矩阵为 ,则图 G 一定是_向图。016. n (n0) 个顶点的连通无向图各顶点的度之和最少为_。7. 设图 G = (V, E),V = V0, V1, V2, V3, E = (V0, V1), (V0, V2), (V0, V3), (V1, V3),则从顶点 V0 开始的图 G 的不同深度优先序列有_种,例如_。48. 设图 G = (V, E),V = P, Q, R, S, T, E = , , , ,从顶点 P 出发,对图 G 进行广度优先搜索所得的所有序列为_和_。9. n (n0) 个顶点的

10、无向图中顶点的度的最大值为_。10.在重连通图中每个顶点的度至少为_ 。11.在非重连通图中进行深度优先搜索,则深度优先生成树的根为关节点的充要条件是它至少有_个子女。12.(n0) 个顶点的连通无向图的生成树至少有_条边。13.101 个顶点的连通网络 N 有 100 条边,其中权值为 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 的边各10 条,则网络 N 的最小生成树各边的权值之和为 _。14.在使用 Kruskal 算法构造连通网络的最小生成树时,只有当一条候选边的两个端点不在同一个_上,才有可能加入到生成树中。15.深度优先生成树的高度比广度优先生成树的高度_。16.求

11、解带权连通图最小生成树的 Prim 算法适合于_图的情形,而 Kruskal 算法适合于_图的情形。17.求解最短路径的 Dijkstra 算法适用于各边上的权值_的情形。若设图的顶点数为 n,则该算法的时间复杂度为_ 。18.若对一个有向无环图进行拓扑排序,再对排在拓扑有序序列中的所有顶点按其先后次序重新编号,则在相应的邻接矩阵中所有_元素将集中到对角线以上。参考答案: 1. 非空 2. 有, 无 3. n(n-1)/2, 04. n-1 5. 有 6. 2(n-1)7. 4, V0V1V3V2(或 V0V2V1V3, V0V2V3V1, V0V3V1V2)8. PQRST 和 PRQTS

12、9. n-1 10. 211. 2 12. n-1 13. 55014. 连通分量 15. 高 16. 稠密,稀疏17. 非负,O(n2) 18. 非零(或值为 1 的)三、判断题1. 一个图的子图可以是空图,顶点个数为 0。2. 存储图的邻接矩阵中,矩阵元素个数不但与图的顶点个数有关,而且与图的边数也有关。3. 一个有 1000 个顶点和 1000 条边的有向图的邻接矩阵是一个稀疏矩阵。54. 对一个连通图进行一次深度优先搜索(depth first search)可以遍访图中的所有顶点。5. 有 n (n1) 个顶点的无向连通图最少有 n-1 条边。6. 有 n (n1) 个顶点的有向强连

13、通图最少有 n 条边。7. 图中各个顶点的编号是人为的,不是它本身固有的,因此可以因为某种需要改变顶点的编号。8. 如果无向图中各个顶点的度都大于 2,则该图中必有回路。9. 如果有向图中各个顶点的度都大于 2,则该图中必有回路。10.图的深度优先搜索(depth first search)是一种典型的回溯搜索的例子,可以通过递归算法求解。11.图的广度优先搜索(breadth first search)算法不是递归算法。12.有 n 个顶点、e 条边的带权有向图的最小生成树一般由 n 个顶点和 n-1 条边组成。13.对于一个边上权值任意的带权有向图,使用 Dijkstra 算法可以求一个顶

14、点到其它各个顶点的最短路径。14.对一个有向图进行拓扑排序(topological sorting) ,一定可以将图的所有顶点按其关键码大小排列到一个拓扑有序的序列中。15.有回路的有向图不能完成拓扑排序。16.对任何用顶点表示活动的网络(AOV 网)进行拓扑排序的结果都是唯一的。17.用边表示活动的网络(AOE 网)的关键路径是指从源点到终点的路径长度最长的路径。18.对于 AOE 网络,加速任一关键活动就能使整个工程提前完成。19.对于 AOE 网络,任一关键活动延迟将导致整个工程延迟完成。20.在 AOE 网络中,可能同时存在几条关键路径,称所有关键路径都需通过的有向边为桥。如果加速这样

15、的桥上的关键活动就能使整个工程提前完成。21.用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中的顶点个数有关,而与图的边数无关。22.邻接表只能用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。23.邻接矩阵只适用于稠密图(边数接近于顶点数的平方) ,邻接表适用于稀疏图(边数远小于顶点数的平方)624.存储无向图的邻接矩阵是对称的,因此只要存储邻接矩阵的下(上)三角部分就可以了。25.连通分量是无向图中的极小连通子图。26.强连通分量是有向图中的极大强连通子图。27.在 AOE 网络中一定只有一条关键路径。参考答案: 1. 否 2. 否 3. 是 4. 是

16、 5. 是6. 否 7. 是 8. 是 9. 否 10. 是11. 是 12. 否 13. 否 14. 否 15. 是16. 否 17. 是 18. 否 19. 是 20. 是21. 是 22. 否 23. 是 24. 是 25. 否26. 是 27. 否四、运算题1. 设连通图 G 如图所示。试画出该图对应的邻接矩阵表示,并给出对它执行从顶点 V0 开始的广度优先搜索的结果。2. 设连通图 G 如图所示。试画出该图及其对应的邻接表表示,并给出对它执行从 V0 开始的深度优先搜索的结果。3. 设连通图 G 如图所示。试画出从顶点 V0 出发的深度优先生成树,指出图 G 中哪几个顶点是关节点(即

17、万一它失效则通信网络将发生故障) 。4. 设连通图 G 如图所示, (1) 如果有关节点,请找出所有的关节点。V0V1V2V5 V4V3V6V7V8V0V1V2V5 V4V3V6V7V8V0V1V2V5 V4V3V6V7V8 71n0kkjiijbac(2) 如果想把该连通图变成重连通图,至少在图中加几条边?如何加?5. 对于如图所示的有向图,试写出:(1) 从顶点出发进行深度优先搜索所得到的深度优先生成树;(2) 从顶点出发进行广度优先搜索所得到的广度优先生成树6. 设有向图 G 如图所示。试画出从顶点 V0 开始进行深度优先搜索和广度优先搜索得到的 DFS 生成森林和 BFS 生成森林。7

18、. 表示图的另一种方法是使用关联矩阵 INC 。其中,一行对应于一个顶点,一列对应于一条边。因此,如果边 j 依附于顶点 i,则 INCij=1。如果 ADJ 是图 G =(V, E)的邻接矩阵,INC是关联矩阵,试说明在什么条件下将有 ADJ = INCINCTI,其中,INCT 是矩阵 INC 的转置矩阵,I 是单位矩阵。两个 nn 的矩阵的乘积 C = AB 定义为公式中的 定义为按位加, 定义为按位乘。设无向图 G 如图所示。试画出该图的邻接矩阵和关联矩阵。8. 设有一个连通网络如图所示。试按如下格式,应用 Kruskal 算法给出在构造最小生成树过程中顺序选出的各条边。V1V2 V3

19、V4V7V6V0V5 01 23 4 5 67e0 e1e2 e3 e4 e5e7e6e8 e901 234 56 618 753 4 268( 始顶点号,终顶点号, 权值 )( , , )( , , )( , , )( , , )( , , )9. 设有一个连通网络如图所示。试采用 prim 算法从顶点 0 开始构造最小生成树。 (写出加入生成树顶点集合 S 和选择边 Edge 的顺序)S:顶点号 Edge:(顶点,顶点,权值)0 ( , , )0 ( , , )0 ( , , )0 ( , , )0 ( , , )0 10.计算连通网的最小生成树的 Dijkstra 算法可简述如下:将连通

20、网所有的边以方便的次序逐条加入到初始为空的生成树的边集合 T 中。每次选择并加入一条边时,需要判断它是否会与先前加入 T 中的边构成回路。如果构成了回路,则从这个回路中将权值最大的边退选。如果以邻接矩阵作为连通网的存储结构(仅使用矩阵的上三角部分) ,并在邻接矩阵的下三角部分记录最小生成树的边信息。试以如下所示的图 G 为例,画出构造出最小生成树及其邻接矩阵,并在括号内填入每次选择的边和可能去掉的边。选 择 的 边 去 掉 的 边(顶点, 顶点, 权值) (顶点, 顶点, 权值)( , , ) ( , , )1 23 46509 107511 87262111 18141619 956 026

21、18950416Edge9( , , ) ( , , )( , , ) ( , , )( , , ) ( , , )( , , ) ( , , )( , , ) ( , , )( , , ) ( , , )( , , ) ( , , )( , , ) ( , , )( , , ) ( , , )11.有八项活动, 每项活动要求的前驱如下:活动 A0 A1 A2 A3 A4 A5 A6 A7前驱 无前驱A0 A0 A0, A2A1 A2, A4A3 A5, A6(1) 试画出相应的 AOV 网络, 并给出一个拓扑排序序列。(2) 试改变某些结点的编号, 使得用邻接矩阵表示该网络时所有对角线以下的

22、元素全为 0。12.试对下图所示的 AOE 网络(1) 这个工程最早可能在什么时间结束。 (2) 确定哪些活动是关键活动。画出由所有关键活动构成的图,指出哪些活动加速可使整个工程提前完成。13.设带权有向图如图所示。试采用 Dijkstra 算法求从顶点 0 到其他各顶点的最短路径和最短路径长度。 14.一项工程由六个子工程 p1, p2, , p6 组成。这些子工程之间有下列关系:p1 Ee 0 0 15 19 15 19 29 38El 17 0 15 19 27 27 37 38如果活动 k 的最早可能开始时间 Ee(k) 与最迟允许开始时间 El(k)相等,则该活动是关键活动。本题的关

23、键活动为, , , ,它们组成关键路径。这些关键活动中任一个提前完成,整个工程就能提前完成。整个工程最早在 43 天完成。由关键活动组成的 AOV 网络如图所示。A0A1A3A5A2A4A6A71111519102 23445 5661111519102 23445 5661513.带权有向图如图所示:应用 Dijkstra 算法求从顶点 V0 到其他各顶点的最短路径 Path 和最短路径长度 Len 的步骤如下:步骤V0 V1 V2 V3 V4 动作Path Len Path Len Path Len Path Len1 V0V1 4 V0V3 7 选 V0V1V0V1 4 V0V1V2 8

24、 V0V3 7 参照 V1 调整2 V0V1 4 V0V1V2 8 V0V3 7 选 V0V3V0V1 4 V0V1V2 8 V0V3 7 V0V3V4 12 参照 V3 调整3 V0V1 4 V0V1V2 8 V0V3 7 V0V3V4 12 选 V0V1V2V0V1 4 V0V1V2 8 V0V3 7 V0V1V2V4 10 参照 V2 调整4 V0V1 4 V0V1V2 8 V0V3 7 V0V1V2V4 10 选V0V1V2V414.图 G 为可能的施工顺序有:p1, p2, p4, p3, p5, p6p1, p4, p2, p3, p5, p6p4, p5, p1, p3, p2,

25、 p615.该图的强连通分量分别为: 71824459123 40p1p2p6p4p5p3ecabgfd16五、算法分析题1. 已知有向图的邻接矩阵表示及其一个算法描述如下:const int MaxVertices = 5;struct Graph /图的邻接矩阵表示int EdgeMaxVerticesMaxVertices; /有向图邻接距阵int CurrentNode; /有向图当前结点数int CurrentEdges; /当前边数int unknown ( int i ) int d = 0;for ( int j = 0; j struct Vertex /邻接表中顶点的定义T

26、ype data;Edge *adj;template struct Graph /邻接表Vertex * NodeTable; /顶点表int NumVertices; /当前顶点个数 int NumEdges; /当前边数int DegreeMaxVertices; /各个顶点的度的记录数组/下列算法是计算有向图中各个顶点的度,并保存在数组 Degree 中。请在 处/填入合适的内容,使其成为一个完整的算法。void FindDegree ( ) int i; Edge * p = NULL;for ( i = 0; i link ) (2) ;(3) ;4. 已知有向图的邻接表类的表示的

27、形式描述如下:struct Edge /邻接表中边结点的定义int dest; /邻接的结点float cost; /边的权值Edge * link;template struct Vertex /邻接表中顶点的定义Type data;18Edge *adj;template struct Graph /邻接表Vertex * NodeTable; /顶点表int NumVertices; /当前顶点个数 int NumEdges; /当前边数int DegreeMaxVertices; /各个顶点的度的记录数组/下列算法是计算有向图 G 中一个顶点 vi 的入度。请在 处填入合适的内容,/使

28、其成为一个完整的算法。void FindDegree ( int i ) int deg, j; Edge * p = NULL;deg = 0;for ( j = 0; j link;if ( p = NULL ) break;if ( p != NULL ) (2) ; return deg;5. 已知有向图的邻接表类的表示的形式描述如下:struct Edge /邻接表中边结点的定义int dest; /邻接的结点float cost; /边的权值Edge * link;template struct Vertex /邻接表中顶点的定义Type data;Edge *adj;templa

29、te struct Graph /邻接表Vertex * NodeTable; /顶点表int NumVertices; /当前顶点个数 int NumEdges; /当前边数int DegreeMaxVertices; /各个顶点的度的记录数组/下列算法是从有向图 G 中删除所有以 vi 为弧头的有向边。请在 处填入合适/的内容,使其成为一个完整的算法。void DeletEdge ( int i ) int de = 0, j; Edge *p, *q;19if ( i = NumVertices ) cout link; if ( p != NULL ) if ( p != NodeTa

30、blej.adj ) q-link = p-link; else (2) ;delete p;de+;NumEdges = NumEdges - de;6. 已知带权图的邻接矩阵表示和邻接表类表示的形式描述分别如下:(1)邻接矩阵的定义#define INFINITY INT_MAX /INT_MAX 为最大整数,表示const int MaxVertices = 20;template struct AdjMatrix Type * NodeTable; /顶点表定义float arrMaxverticesMaxVertices; /邻接矩阵定义int NumVertices; /当前顶点个

31、数 int NumEdges; /当前边数;(2) 邻接表定义struct Edge /邻接表中边结点的定义int dest; /邻接的结点float cost; /边的权值Edge * link;template struct Vertex /邻接表中顶点的定义Type data;Edge *adj;template struct AdjTable /邻接表Vertex * NodeTable; /顶点表int NumVertices; /当前顶点个数 int NumEdges; /当前边数/下列算法是根据一个图的邻接矩阵建立该图的邻接表,请在 处填入合适/的内容,使其成为一个完整的算法。A

32、djTable * convertM ( ) 20/将图的邻接矩阵(用 this 指针指示)转换为邻接表,函数返回邻接表的地址。AdjTable * A; Edge *e;A-NodeTable = new VertexNumVertices;A-NumEdges = NumEdges;A-NumVertices = NumVertices;for ( int i = 0; i NodeTablei.data = NodeTablei;A-NodeTablei.adj = (1) ;for ( int j = 0; j dest = j;e-cost= (2) ;e-link = A-Node

33、Tablei.adj;(3) ;return A; 7. 已知带权图的邻接矩阵表示和邻接表类表示的形式描述分别如下:(1) 邻接矩阵的定义#define INFINITY INT_MAX /INT_MAX 为最大整数,表示const int MaxVertices = 20;template struct AdjMatrix Type * NodeTable; /顶点表定义float arrMaxverticesMaxVertices; /邻接矩阵定义int NumVertices; /当前顶点个数 int NumEdges; /当前边数;(2) 邻接表定义struct Edge /邻接表中边

34、结点的定义int dest; /邻接的结点float cost; /边的权值Edge * link;template struct Vertex /邻接表中顶点的定义Type data;Edge *adj;template struct AdjTable /邻接表Vertex * NodeTable; /顶点表int NumVertices; /当前顶点个数 int NumEdges; /当前边数21/下列算法是根据一个图的邻接表存储结构建立该图的邻接矩阵存储结构,/请在 处填入合适的内容,使其成为一个完整的算法AdjMatrix * convertAL( ) /将图的邻接表(用 this 指

35、针指示)转换为邻接矩阵,函数返回邻接矩阵的地址。AdjMatrix * A; int i, j; Edge *p;A-NodeTable = new VertexNumVertices;A-arr = new float MaxverticesMaxVertices;A-NumEdges = NumEdges;A-NumVertices = NumVertices;for ( i = 0; i arrij = INFINITY;A-NodeTablei = _ _(1)_ _;for ( i = 0; i arrip-dest = _ _(2)_;_(3)_;8. 已知图的邻接表和逆邻接表的形

36、式描述如下:struct Edge /结点定义int dest; /邻接结点float cost; /边的权值 Edge * link;template struct Vertex /顶点定义Type data;Edge *adj;template struct Graph /邻接表与逆邻接表定义Vertex * NodeTable; /邻接表顶点表Vertex * OppositNodeTable; /逆邻接表顶点表int NumVertices; /当前顶点个数 int NumEdges; /当前边数/下列算法是根据一个图的邻接表存储结构建立该图的逆邻接表存储结构,请/在 处填入合适的内容

37、,使其成为一个完整的算法。void convertM ( ) int i; Edge *p, *q;OppositNodeTable = new VertexNumVertices;22for ( i = 0; i dest = i;q-cost = p-cost;_ _(1)_ _;OppositNodeTablep-dest.adj = q;_(2)_;参考答案:1. (1) 执行操作后的返回值是 5。 /2 分(2) 算法的功能是计算有向图中一个顶点的度。 /2 分算法的时间复杂度是 O(n),n 为图的顶点个数。 /2 分2. 执行操作 G.unknown (3) 后,图的邻接矩阵为:

38、 /3 分算法的功能是从图中删除所有与某个顶点相关的边。 /3 分3. 填空结果(1) 0 /2 分 (2) Degreep-dest+ /2 分(3) Degreei+ /2 分 ( 注:(2), (3)互换也正确 )4. 填空结果(1) p != NULL /3 分5. 填空结果(1) p != NULL /3 分6. 填空结果(1) NULL /2 分A =0 1 1 0 10 0 0 0 00 0 0 0 10 0 0 0 00 0 0 0 023(2) arrij /2 分(3) A-NodeTablei.adj = e /2 分7. 填空结果(1) NodeTablei.data

39、/2 分(2) p-cost /2 分(3) p = p-link /2 分8. 填空结果(1) q-link = OppositNodeTablep-dest.adj /3 分(2) p = p-link /3 分六、算法设计题1. 试编写函数用邻接表存储结构实现template int AdjTable :GetFirstNeighbor ( int v );/给出顶点位置为 v 的第一个邻接顶点的位置,如果找不到,则函数返回-12. 用邻接表存储结构实现带权有向图的构造函数template AdjTable : AdjTable ( int sz = DefaultSize ) :Max

40、Vertices(sz) 输入顶点个数、数据及各条边的信息,建立邻接表 3. 试编写函数用邻接表存储结构实现template int AdjTable :GetNextNeighbor ( int v, int w );/给出顶点 v 的邻接顶点 w 的下一个邻接顶点的位置,若没有下一个邻接顶点,则函数返回 -1 参考答案1. 算法实现如下template int AdjTable :GetFirstNeighbor ( int v ) /给出顶点位置为 v 的第一个邻接顶点的位置,如果找不到,则函数返回-1if ( v != -1 ) Edge *p = NodeTable (v).adj;

41、 /4 分if ( p != NULL ) return p-dest; /4 分return 1; 2. 算法实现如下template AdjTable :AdjTable ( int sz = DefaultSize ) :MaxVertices ( sz ) int i, k, j; Type tail, head; float weight; Edge *p;24NodeTalbe = new VertexMaxVertices;cin NumVertices;for ( i = 0; i NodeTablei.data; NodeTablei.adj = NULL; cin NumE

42、dges;for ( i = 0; i tail head weight;k = GetVertexPos(tail); j = GetVertexPos(head);p = new Edge;p-dest = j; p-cost = weight;p-link = NodeTablek.adj; NodeTablek.adj = p;3. 算法实现如下template int AdjTable :GetNextNeighbor ( int v, int w ) /给出顶点 v 的邻接顶点 w 的下一个邻接顶点的位置,若没有下一个邻接顶点,则 /函数返回-1 if ( v != -1 ) Edge * p = NodeTablev.adj;while ( p != NULL ) if (p-dest = w else p = p-link;return 1;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报