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

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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 1 习题答案 一、选择 1-5:BC,A,C,D,D 6-10:CC,C,BD,AB,B 二、填空 n(n-1)/2 9 2(n-1) n 深度优先 广度优先 三、判断 1-6:对错错错错错 2:提示,如存在A到D的两条路径A-〉B-〉D和A-〉C-〉D,顶点D可能多次访问 四、应用题 1、(1)G1最多n(n-1)/2条边,最少n-1条边 (2) G2最多n(n-1)条边,最少n条边 2、遍历起始顶点不同;存储结构不同;在邻接表情况下邻接点的顺序不同;以及遍历算法迭代顺序不同等。 3、abedfc, acfdeb, aebdfc, aedfcb 4、 深度优先遍历:V1-V2-V3-V6-V5-V4 深度优先遍历:V1-V2-V5-V4-V3-V6 5、 设邻接表(略)中顶点的邻接点按顶点编号升序排列(V1编号为1) (1)广度优先遍历序列:V1V2V3V4V5V6V7V8 (2)深度优先遍历序列:V1V2V4V8V5V3V6V7 应用题5 应用题5(3)BFS V3 V2 V4 V5 V1 V8 V6 V7 应用题5(3)DFS V3 V2 V4 V5 V1 V8 V6 V7 V7 6、 (2)深度优先遍历:V1,V2,V3,V4,V5;宽度优先遍历:V1,V2,V3,V4,V5 应用题 应用题6(1) (3) DFS和BFS生成森林 V3 V2 V1 V5 V4 V3 V2 V1 V5 V4 V3 V2 V1 V5 V4 7、(1)(2) 应用题7( 应用题7(1) (2) (2)广度优先遍历序列 AFEDBC 8、 (1)仅从铺设费用角度出发,为了求解最经济的方案,可以把问题抽象为求无向带权图的最小生成树。可以采Prim算法或Kruscal算法手工模拟。可以求得本题最小生成树有两种形式,如下图所示。两种方案的总费用都是16。 (2)存储题目中的图可以采用邻接矩阵(或邻接表)。构造最小生成树可以采用Prim算法(或Kruscal算法)。 (3)题目中TTL为5,即IP分组的生存时间(在本题中理解为最大传递距离)为5,方案1中TL和BJ过远(距离为11),TTL为5不足以让IP分组从H1(TL)传递到H2(BJ),因此H2不能收到该IP分组。而方案2中TL和BJ相邻(距离为3),H2可以收到IP分组。 XA XA BJ TL WH JN CS QD NJ 2 2 2 3 2 3 2 XA BJ TL WH JN CS QD NJ 2 3 2 2 2 3 2 方案一 方案二 五、算法题 (只给出关键代码或伪代码) 1、 int count ( int k ) // 在n个顶点以邻接表表示的有向图中,求指定顶点k(0≤kn)的入度 { int count=0; edgeNode *p; for (int i=0;iverNum;i++) //求顶点k的入度要遍历整个邻接表 { p = verList[i].firstEdge; //取顶点 i 的邻接表 while (p) { if (p-to==k) count++; p=p-next; } } return(count); //顶点k的入度 } 2、 [题目分析]本题应使用深度优先遍历,从主调函数进入dfs(v)时 ,开始记数,若退出dfs()前,已访问完有向图的全部顶点(设为verNum个),则有向图有根,v为根结点。将verNum个顶点从0到verNum-1编号,各调用一次dfs()过程,就可以求出全部的根结点。题中有向图的邻接表存储结构、记顶点个数的变量、以及访问标记数组等均设计为全局变量。 int num; // 全局,记录一次DFS能遍历到的顶点数 void dfs(int v){ visited[v]=true; num++; // 访问的顶点数+1 edgeNode *p= verList[v].firstEdge; while (p){ if (visied[p-to] == false) dfs(p-to); p=p-next; } } void judgeRoot(){ // 判断有向图是否有根,有根则输出之 int i ; f

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档