关键路径

转载 2016年06月02日 00:34:58

AOE网:在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,边上的权值表示活动的持续时间,称这样的有向图叫做边表示活动的网,简称AOE网。AOE网中没有入边的顶点称为始点(或源点),没有出边的顶点称为终点(或汇点)。

AOE网的性质

⑴ 只有在某顶点所代表的事件发生后,从该顶点出发的各活动才能开始;

⑵ 只有在进入某顶点的各活动都结束,该顶点所代表的事件才能发生。

关键路径:在AOE网中,从始点到终点具有最大路径长度(该路径上的各个活动所持续的时间之和)的路径称为关键路径。

关键活动:关键路径上的活动称为关键活动。关键活动:e[i]=l[i]的活动

  由于AOE网中的某些活动能够同时进行,故完成整个工程所必须花费的时间应该为始点到终点的最大路径长度。关键路径长度是整个工程所需的最短工期。

与关键活动有关的量

⑴ 事件的最早发生时间ve[k]

  ve[k]是指从始点开始到顶点vk的最大路径长度。这个长度决定了所有从顶点vk发出的活动能够开工的最早时间。

    

⑵ 事件的最迟发生时间vl[k]

  vl[k]是指在不推迟整个工期的前提下,事件vk允许的最晚发生时间。

    

 

⑶ 活动的最早开始时间e[i]

  若活动ai是由弧<vk , vj>表示,则活动ai的最早开始时间应等于事件vk的最早发生时间。因此,有:e[i]=ve[k]

⑷ 活动的最晚开始时间l[i]

  活动ai的最晚开始时间是指,在不推迟整个工期的前提下, ai必须开始的最晚时间。若ai由弧<vkvj>表示,则ai的最晚开始时间要保证事件vj的最迟发生时间不拖后。因此,有:l[i]=vl[j]-len<vk, vj>

 

示例:

  

所以:

 

代码实现:

Status TopologicalOrder(ALGraph G, Stack &T)
{
    // 有向网G采用邻接表存储结构,求各顶点事件的最早发生时间ve(全局变量)。
    // T为拓扑序列定点栈,S为零入度顶点栈。
    // 若G无回路,则用栈T返回G的一个拓扑序列,且函数值为OK,否则为ERROR。
    Stack S;
    int count=0,k;
    char indegree[40];
    ArcNode *p;
    InitStack(S);
    FindInDegree(G, indegree);  // 对各顶点求入度indegree[0..vernum-1]
    for (int j=0; j<G.vexnum; ++j)     // 建零入度顶点栈S
        if (indegree[j]==0)
            Push(S, j);  // 入度为0者进栈
    InitStack(T);//建拓扑序列顶点栈T
    count = 0; 
    for(int i=0; i<G.vexnum; i++)
        ve[i] = 0;  // 初始化
    while (!StackEmpty(S))
    {
        Pop(S, j);  Push(T, j);  ++count;       // j号顶点入T栈并计数
        for (p=G.vertices[j].firstarc;  p;  p=p->nextarc)
        {
            k = p->adjvex;            // 对j号顶点的每个邻接点的入度减1
            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>)
    }
    if(count<G.vexnum)
        return ERROR;  // 该有向网有回路
    else
        return OK;
}

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Status CriticalPath(ALGraph G)
{
    // G为有向网,输出G的各项关键活动。
    Stack T;
    int a,j,k,el,ee,dut;
    char tag;
    ArcNode *p;
    if (!TopologicalOrder(G, T))
        return ERROR;
    for(a=0; a<G.vexnum; a++)
        vl[a] = 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;     //dut<j,k>
            if (vl[k]-dut < vl[j])
                vl[j] = vl[k]-dut;
        }
    for (j=0; j<G.vexnum; ++j)            // 求ee,el和关键活动
        for (p=G.vertices[j].firstarc;  p;  p=p->nextarc)
        {
            k=p->adjvex;dut=p->info;  
            ee = ve[j];  el = vl[k]-dut;
            tag = (ee==el) ? '*' : ' ';
            printf(j, k, dut, ee, el, tag);   // 输出关键活动
        }
    return OK;
}

数据结构----关键路径详解(Java)

算法说明: 求关键路径 1.输入e条弧,建立AOE网的存储结构,顶点数为n,顶点从0开始编号,设源点为v0、汇点为vn-1 2.从源点v0出发,令ve[0]=0,按拓扑有序求其余各顶点事件的最早...
  • daijope
  • daijope
  • 2011年09月15日 16:13
  • 2287

项目管理入门(4)——基本原则之关键路径

翻译来源:A Project Management Primeror “a guide to making projects work (v2.0)”by Nick Jenkins基本原则之关键路径 ...
  • donhao
  • donhao
  • 2010年09月04日 15:58
  • 787

信息系统项目管理师之一关键路径分析

活动定义、活动排序以及资源和历时估算的结果就构成了制定项目进度计划的基础。项目的进度计划既是回答每个活动的进度安排,而更重要的是得到有关项目整体的进度信息。制定项目进度计划的工具和方法有:干特图,关键...
  • moshengtan
  • moshengtan
  • 2013年10月24日 17:10
  • 7548

AOE网中关键路径的一般求法

预备知识 1、由于整个工程只有一个开始点,一个结束点,故在正常情况下(无环),网中只有一个入度为0的点和一个出度为0的点。 2、与AOV网不同,AOE网中有些活动可以并行的进行,所以完成工程的最短...
  • Wall_F
  • Wall_F
  • 2012年12月01日 11:26
  • 6201

关键路径(AOE)---《数据结构》严蔚敏

关键路径,AOE,《数据结构》严蔚敏
  • cjc211322
  • cjc211322
  • 2014年08月04日 11:47
  • 1233

数据结构之关键路径

今天看的关键路径,总结一下学的关键路径。 一,什么是关键路径    把开始顶点到完成顶点的最长路径称为关键路径。 二,如何求关键路径 (首先先说明,作为一个有关键路径的图,图中的每条边带有权值...
  • zq17865815296
  • zq17865815296
  • 2016年09月14日 16:55
  • 1222

图之关键路径

图之关键路径
  • zhang_kai_
  • zhang_kai_
  • 2016年11月23日 21:00
  • 1489

C语言实现“关键路径”的求解

工程上常常用一个有向无环图来代表一个项目,以节点表示某个事件,以边表示活动,边上的数字表示活动的持续时间。本文给出了求解项目关键路径的C语言算法。...
  • PosPro
  • PosPro
  • 2016年07月21日 13:40
  • 1913

关键路径的选取

这是一篇我的心得,写verilog的心得,啊,对于学习verilog设计FPGA的同学一定会有帮助的啊!     本人就例子来教大家怎样提取关键路径:     先解释一下什么叫关键路径     所谓关...
  • zhongrg
  • zhongrg
  • 2007年10月22日 22:08
  • 1850

教你轻松计算AOE网关键路径

站位。。。
  • wang379275614
  • wang379275614
  • 2013年10月31日 23:58
  • 37450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关键路径
举报原因:
原因补充:

(最多只允许输入30个字)