上一篇文章的拓扑排序主要是为了解决一个工程能否顺利进行的问题,但有时我们还需要解决工程完成需要的最短时间的问题。
在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网成为AOE网(Acitivity On Edge Network)。
AOE网具有这样的特性,在某顶点所代表的事件发生后,从该顶点出发的各活动才能开始。只有在进入某顶点的各活动都已经结束,该顶点所代表的事件才能发生。
把路径上各个活动所持续的时间之和称为路径长度,从源点到汇点具有最大长度的路径叫关键路径,在关键路径上的活动叫关键活动。
只有缩短关键路径上关键活动的时间才可以减少整个工期长度。
只需要找到所有活动的最早开始时间和最晚开始时间,并且比较它们,如果相等就意味着此活动是关键活动,活动间的路径为关键路径。如果不等,则就不是。
以下程序在DEV C++下编译运行通过。
#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 20
int *etv,*ltv;//事件最早发生时间和最迟发生时间数组
int *Stack2;//用于存储拓扑序列的栈
int to