文档详情

AOV网-拓扑排序.ppt

发布:2018-01-13约4.96千字共49页下载文档
文本预览下载声明
如何求关键路径 ve(i):表示事件i的最早开始时间 vl(i):表示事件i的最迟开始时间 已知ve(1)=0,计算其余顶点的ve值要按照顶点拓扑排序后的次序进行 ve(j)=max(ve(i) + dut(i,j)) i,j∈T,T是以j为头的弧的集合 a1=6 a2=4 v8 v1 V2 V3 v5 v8 v7 v9 a4=1 a5=1 a7=9 a8=7 a10=2 a11=4 V1到Vj的最长路径 如何求关键路径 vl(n-1)=ve(n-1),然后按照顶点逆拓扑排序后的次序求其余顶点的vl vl(i)=min(vl(j) - dut(i,j)) i,j∈S,S是以i为尾的弧的集合 a1=6 a2=4 v8 v1 V2 V3 v5 v8 v7 v9 a4=1 a5=1 a7=9 a8=7 a10=2 a11=4 如何求关键路径 用e(i)和l(i)分别表示活动ai的最早开始间和最迟开始时间 显然有: e(i)=ve(j) l(i)=vl(k)-dut(j,k) j k ai 如何求关键路径 a1=6 a2=4 v8 v1 V2 V3 v4 v5 v6 v8 v7 v9 a3=5 a4=1 a5=1 a6=2 a7=8 a8=7 a9=4 a10=2 a11=4 v1 v2 v3 v4 v5 v6 v7 v8 v9 ve vl v4 v5 v6 v7 v8 v9 ve vl 0 0 0 0 0 0 0 0 0 6 4 5 14 18 7 7 15 18 18 18 18 18 18 18 18 18 16 14 7 6 6 10 8 0 拓扑有序序列: v1 v2 v3 v4 v6 v5 v8 v7 v9 逆拓扑有序序列:v9 v7 v8 v5 v2 v3 v6 v4 v1 如何求关键路径 a1 a2 a3 e l a4 a5 a6 a7 a8 a9 a10 a11 6 4 5 1 1 2 8 7 4 2 4 0 0 0 6 4 5 7 7 7 15 14 0 2 3 6 6 8 8 7 10 16 14 a1=6 a2=4 v8 v1 V2 V3 v4 v5 v6 v8 v7 v9 a3=5 a4=1 a5=1 a6=2 a7=8 a8=7 a9=4 a10=2 a11=4 0, 0 6, 6 4, 6 5, 8 7, 7 7, 10 15, 16 14, 14 18, 18 * * AOV网-拓扑排序 有向无环图及其应用 AOE网-关键路径 有向无环图 小结和作业 有向无环图的应用 公用表达式 有向无环图 一、定义: 一个无环的有向图,称为有向无环图(DAG图) V1 V2 V4 V5 V3 V7 V6 V8 V1 V2 V4 V5 V3 V7 V6 V8 DAG图 有环的有向图 DAG = Directed Acyclic Graph 有向无环图 二、如何判断一个图是否是DAG? V1 V2 V4 V5 V3 V7 V6 V8 DAG图 V1 V2 V3 V8 V7 V6 V5 V4 深度优先搜索没有出现指向祖先的回边,即: 没有一个顶点有一条边,指向遍历过程中先访问过的顶点(并且这些顶点的DFS函数没有执行完) V1 V2 V4 V5 V3 V7 V6 V8 有向无环图 非DAG图 V1 V2 V3 V8 V7 V6 V5 V4 V7有一条边指向了V3,所以有环 V7指向V8的边,没有构成环,因为没有V8到V7的路径 有向无环图 bool DAG(Graph G) { for (v=0; vG.vexnum; ++v) visited[v] = FALSE; // 访问标志数组初始化 InitStack(S);//存放顶点 for (v=0; vG.vexnum; ++v) { if (!visited[v]) if(!DFS-DAG(G, v)) return(FALSE); // 对尚未访问的顶点调用DFS-DAG } return TRUE; } 有向无环图 Bool DFS-DAG(Graph G, int v) { // 从顶点v出发,深度优先搜索遍历连通图 G visited[v] = TRUE; Push(S,v); for(w=FirstAdjVex(G, v);w=0; w=NextAdjVex(G,v,w)){ {if (w in S) then return(FALSE);//有回边 if(!visited[w]){
显示全部
相似文档