- 1、本文档共144页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 5 拓扑排序 ? AOE(Activity On Vertex)网 若以边表示活动,且边上的权值表示进行该项活动所需时间,而以顶点表示“事件”,称这种有向图为活动边网络,简称为AOE(Activity On Vertex)网。 6 关键路径 ?工程的AOE网络 一项工程可以表示为一个AOE网络。 整个工程完成的时间为:从有向图的源点到汇点的最长路径。 “关键活动”指的是:该弧上的权值增加 将使有向图上的最长路径的长度增加。 6 关键路径 ?源点 表示工程开始事件的顶点的入度为零(称作源点), ?汇点 表示工程结束事件的顶点的出度为零(称作汇点)。 一个工程的AOE网应是只有一个单源点和单汇点的有向无环图。 6 关键路径 拓扑有序序列: a - d - f - c - b - e - h - g - k a b c d e f g h k 6 4 5 2 1 1 8 7 2 4 4 源点 汇点 6 1 7 4 6 关键路径 ?如何求关键活动 (1)事件(顶点) 的 最早发生时间 ve(j) ve(j) = 从源点到顶点j的最长路径长度; (2)事件(顶点) 的 最迟发生时间 vl(k) vl(k) = 从顶点k到汇点的最短路径长度。 6 关键路径 (3) 假设第 i 条弧为 j, k 则 对第 i 项活动言 “活动(弧)”的 最早开始时间 ee(i) ee(i) = ve(j); (4)“活动(弧)”的 最迟开始时间 el(i) el(i) = vl(k) – dut(j,k); (5) 若 ee(i)- el(i) =0 则活动i为关键活动 6 关键路径 ?正拓扑排序初始化 ve(源点) = 0; 依次求 ve(k) = Max{ve(j) + dut(j, k)} ?逆拓扑排序初始化 vl(汇点) = ve(汇点); 依次求 vl(j) = Min{vl(k) – dut(j, k)} 6 关键路径 ?关键路径算法 int ve[maxsize]; //顶点的最早发生时间 int TopoOrder(AdjList G, Stack T) { // T为返回拓扑序列的栈, // S为存放入度为0的顶点的栈 int count, i, j, k; ArcNode *p; int indegree[maxsize]; //各顶点入度数组 6 关键路径 Stack S; InitStack(T); InitStack(S); //初始化栈T, S FindID(G, indegree); //求各个顶点的入度 for(i=0; iG.vexnum; i++) if(indegree[i]==0) Push(S, i); count=0; 6 关键路径 for(i=0; iG.vexnum; i++) ve[i]=0; //初始化最早发生时间 while(!StackEmpty(S)) { Pop(S, j); Push(T, j); count++; p=G.vertex[j].firstarc; while(p){ k=p-adjvex; if(--indegree[k]=
文档评论(0)