算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第9章课后习题答案.docx

算法与数据结构(C++语言版)(冯广慧第2版)习题及答案 第9章课后习题答案.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 7 习题答案 选择 1-5:B, D,A,B,B 2解析:C三角矩阵是一个有向图具有拓扑排序的充分不必要条件 5解析:[分析](1)当有向图中存在负的权值时Dijkstra算法失效 有向图中存在负的权值,但不存在负权回路时可用bellman-ford算法 (3)Floyed算法可解决存在负权值但无回路的有向图,每队顶点间的最短路径问题 6-9:A,A,D,B 6解析:边上权值相等的有向网的单源最短路径用求指定源点的BFS生成树的算法可解决 选择第7 选择第7题 V1 V5 V6 V4 V2 V3 V7 判断 1-4:对对错错 填空 1、(1)n (2) n-1 (3)边稠图 (4)稀疏图 2、(1)O(n2) (2)O(eloge) 3、(1)递增 (2)负 (3)O(n2) 4、关键路径 应用 1、 V(G)={1,2,3,4,5,6} E1(G)={(1,2,16),(2,3,5),(2,6,6),(2,4,11),(6,5,18)}, E2(G)={(1,2,16),(2,3,5),(3,6,6),(2,4,11),(6,5,18)} 2、 应用第2 应用第2题 1 7 6 3 2 4 8 0 5 3、 顶点1到其它顶点的最短路径依次是20,31,28,10,17,25,35。按Dijkstra算法所选顶点依次是5,6,2,7,4,3,8。 4、 LPe L Pe Pa N T M (3)最小生成树: V(G)={Pe,N,Pa,L,T,M}∥6个顶点 E(G)={(L,Pa,3),(Pe,T,21),(M,N,32),(L,N,55),(L,Pe,81)}∥ 5条边 5、 题目要求娱乐中心“距其它各结点的最长往返路程最短”,结点V1,V3?,V5和V6?最长往返路径最短都是9。按着“相同条件下总的往返路径越短越好”,选顶点V5,总的往返路径是34。 6、 (1) (3)关键路径有3条,长17。各事件和活动的最早最晚时间如下: V1-V2-V4-V6-V8, V1-V3-V5-V7-V8, V1-V2-V4-V6-V5-V7-V8 求关键路径的一种思路: 关键路径是源点到汇点最长的路径,列举所有从源点到汇点的路径: 1)v1,v2,v4,v6,v8 √ 2)v1,v2,v4,v6,v5,v7,v8 √ 3)v1,v3,v5,v7,v8 √ 4)v1,v3,v4,v6,v8 5)v1,v3,v4,v6,v6,v7,v8 1)2)3)最长均为17 (4)V1结点到其它各结点的最短距离为:2,3,6,12,10,15,16。 算法设计 1、 [题目分析] 连通图的生成树包括图中的全部n个顶点和足以使图连通的n-1条边,最小生成树是边上权值之和最小的生成树。故可按权值从大到小对边进行排序,然后从大到小将边删除。每删除一条当前权值最大的边后,就去测试图是否仍连通,若不再连通,则将该边恢复。若仍连通,继续向下删;直到剩n-1条边为止。 void SpnTree (AdjList g) // 用“破圈法”求解带权连通无向图的一棵最小代价生成树 { typedef struct {int i,j,w}node; // 设顶点信息就是顶点编号,权是整型数 node edge[]; cin en ; // 输入边数和顶点数 for(i=1;i=e;i++) // 输入e条边的图的顶点和权值 cinedge[i].i edge[i].j edge[i].w; for(i=2;i=e;i++) // 按边上的权值大小,对边进行逆序排序 { edge[0]=edge[i]; j=i-1; while(edge[j].wedge[0].w) edge[j+1]=edge[j--]; edge[j+1]=edge[0]; } k=1; eg=e; while(eg=n) // 破圈,直到边数e=n-1 { if(connect(k)) // 删除第k条边若仍连通 { edge[k].w=0; eg--; } // 测试下一条边edge[k],权值置0表示该边被删除 k++; // 下条边 }

您可能关注的文档

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档