网站大量收购独家精品文档,联系QQ:2885784924

数据结构复习的资料 chap7图.ppt

  1. 1、本文档共109页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构复习的资料 chap7图

如何进行拓扑排序? 一、从有向图中选取一个没有前驱 的顶点,并输出之; 重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。 二、从有向图中删去此顶点以及所 有以它为尾的弧; a b c g h d f e a b h c d g f e 在算法中需要用定量的描述替代定性的概念 没有前驱的顶点 ?? 入度为零的顶点 删除顶点及以它为尾的弧 ?? 弧头顶点的入度减1 取入度为零的顶点v; while (v0) { printf(v); ++m; w:=FirstAdj(v); while (w0) { inDegree[w]--; w:=nextAdj(v,w); } 取下一个入度为零的顶点v; } if mn printf(“图中有回路”); 算法描述 为避免每次都要搜索入度为零的顶点, 在算法中设置一个“栈”,以保存“入度为零”的顶点。 CountInDegree(G,indegree); //对各顶点求入度 InitStack(S); for ( i=0; iG.vexnum; ++i) if (!indegree[i]) Push(S, i); //入度为零的顶点入栈 count=0; //对输出顶点计数 while (!EmptyStack(S)) { Pop(S, v); ++count; printf(v); for (w=FirstAdj(v); w; w=NextAdj(G,v,w)){ --indegree(w); // 弧头顶点的入度减一 if (!indegree[w]) Push(S, w); //新产生的入度为零的顶点入栈 } } if (countG.vexnum) printf(“图中有回路”) 7.8 关键路径 问题: 假设以有向网表示一个施工流图,弧上的权值表示完成该项子工程所需时间。 问:哪些子工程项是“关键工程”? 即:哪些子工程项将影响整个工程的完成期限的。 a b c d e f g h k 6 4 5 2 1 1 8 7 2 4 4 例如: “关键活动”指的是:该弧上的权值增加 将使有向图上的最长路径的长度增加。 整个工程完成的时间为:从有向图的源点到汇点的最长路径。 源点 汇点 6 1 7 4 如何求关键活动? “事件(顶点)” 的 最早发生时间 ve(j) ve(j) = 从源点到顶点j的最长路径长度; “事件(顶点)” 的 最迟发生时间 vl(k) vl(k) = 从顶点k到汇点的最短路径长度。 假设第 i 条弧为 j, k 则 对第 i 项活动言 “活动(弧)”的 最早开始时间 ee(i) ee(i) = ve(j); “活动(弧)”的 最迟开始时间 el(i) el(i) = vl(k) – dut(j,k); 事件发生时间的计算公式: ve(源点) = 0; ve(k) = Max{ve(j) + dut(j, k)} vl(汇点) = ve(汇点); vl(j) = Min{vl(k) – dut(j, k)} a b c d e f g h k 6 4 5 2 1 1 8 7 2 4 4 0 0 0 0 0 0 0 0 0 6 4 5 7 11 5 7 15 14 18 18 18 18 18 18 18 18 18 18 16 14 8 6 6 10 8 0 7 拓扑有序序列: a - d - f - c - b - e - h - g - k 0 6 4 5 7 7 15 14 18 18 14 16 10 7 8 6 6 0 0 0 0 6 4 5 7 7 7 15 14 14 16 0 2 3 6 6 8 8 7 10 算法的实现要点: 显然,求ve的顺序应该是按拓扑有序的次序; 而 求vl的顺序应该是按拓扑逆序的次序; 因为 拓扑逆序序列即为拓扑有序序列的 逆序列, 因此 应该在拓扑排序的过程中, 另设一个“栈”记下拓扑有序序列。  1. 熟悉图的各种存储结构及其构造算法,了解实际问题的求解效率与采用何种存储结构和算法有密切联系。  2. 熟练掌握图的两种搜索路径的遍历:遍历的逻辑定义、深度优先搜索和广度优先搜索的算法。 在学习中应注意图的遍历算法与树的遍历算法之间的类似和差异。   3. 应用图的

文档评论(0)

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

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

1亿VIP精品文档

相关文档