- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.5.2 关键路径 AOE-网 AOE-网(Activity On Edge Network):即边表示活动的网。AOE网是一个带权的有向无环图。其中: 顶点表示事件(Event) 弧表示活动(Activity) 权值表示活动持续的时间 通常可用AOE网来估算工程的完成时间。 依据AOE-网可以研究什么问题? (1)完成整项工程至少需要多少时间? (2)哪些活动是影响工程进度的关键? ve[j]和vl[j]可以采用下面的递推公式计算: (1)向汇点递推 ve(源点) = 0 ; ve(j) = Max{ ve(i) + dut(i, j)} (2) 向源点递推 由上一步的递推,最后总可求出汇点的最早发生时间ve[n]。因汇点就是结束点,最迟发生时间与最早发生时间相同,即vl[n]=ve[n]。从汇点最迟发生现时间vl[n]开始,利用下面公式: vl(汇点) = ve(汇点); vl(i) = Min{ vl(j) – dut(i, j) } 总之,关键路径的求解操作包括: 1)计算 ve[j] 和 vl[j] ① 向汇点递推 ve(源点) = 0 ; ve(j) = Max { ve(i)+ dut(i, j)} ② 向源点递推 vl(汇点) = ve(汇点); vl(i) = Min { vl(j) – dut(i, j)} 求最早发生时间ve的算法 Status TopologicalOrder(ALGraph G,Stack T){ //有向网G采用邻接表,求各顶点事件最早发生时间ve(全局变量) //T为拓扑序列顶点栈,s为零入度顶点栈。 ???? FindInDegree(G,indegree);//对各顶点求入度 ???? InitStack(S); //建零入度顶点栈S for(i=0;iG.vexnum; ++i)? ???? if(!indegree[i])Push(S,i) //入度为0者进栈 ?? count=0; InitStack(T); ve[0..G.vexnum-1]=0; //初始化 ???? while(!StackEmpty(S)){ ???????? Pop(S,j); Push(T,j);++count; ???????? for(p=G.vertices[j].firstarc;p;p=p-nextarc){ ???????????? k=p—adjvex; //对i号顶点的每个邻接点的入度减l ???????????? if(--indegree[k]==0)Push(S,k);//若入度减为0,入栈 ???????????? if(ve[j]+*(p-info)ve[k] ) ve[k]=ve[j]+*(p-info); ???????? } //for *(p-info)=dut(j,k)? ??? } //while ????if(countG.vexnum) return ERROR; //该有向网有回路 ????else return OK;} //TopologicalOrder 求关键路径的算法 Status CriticalPath (ALGraph G){ //G为有向网,输出G的各项关键活动 if(!TopologicalOrder(G,T)) return ERROR; ? vl[0..G.vexnum-1]=ve[G.vexnum-1]; //初始化顶点事件的最迟发生时间 while(!StackEmpty(T)) //按拓扑逆序求各顶点的vl值 for(Pop(T,j),p=G.vertices[j].firstarc;p;p=p-nextarc){ ???????????k=p-adjvex; dut=*(p—info); //dutj,k ??????????if(vl[k]-dutvl[j]) vl[j]=vl[k]-dut; ?} //for for(j=0;jG.vexnum;++j) //求ee,el和关键活动 for(p=G.vertices[j];p;p=p-nextarc){ ????????? k=p-adjvex; dut=*(p—info); ee=ve[j];el=vl[k]-dut;tag = (ee==e1) ? ‘*’:’’; ???????????printf(j,k,dut,ee,el,tag); //输出关键活动 ?} } //CriticalPath 总结: 有向无环图是描述一项工程或系统的进行过程的有效工具。
文档评论(0)