求关键活动算法(严蔚敏版,附详细注释)
一些基本概念,可以直接跳过查看算法:
AOE网
关键路径
在AOE网中,一个顶点表示一个工程事件,而一条边表示一个活动。
关键活动
简单理解:当该弧的最早发生时间与最晚发生时间相同时,该活动(即为弧)即为关键活动。
算法实现(伪代码)
关于具体算法中用到的四个数组的意义与算法的实现流程,这里仅在代码中简单解释,具体理解请自行查阅资料。
具体算法思想为一遍拓扑排序,并用栈实现一次拓扑逆序,算法伪代码为严蔚敏数据结构书中,附详细注释。
//变量说明:ve数组表示各事件最早发生时间,其求法为拓扑排序,正序所有发生时间中最大的。
//vl数组为各事件最晚发生时间,其求法为拓扑逆序,逆序事件中所有发生事件最早的。
Status TopologicalOrder(ALGraph G,Stack &T)
//有向网采取邻接表存储结构,求各顶点事件的最早发生时间ve(全局变量)
//T为拓扑排序顶点栈,S为零入度顶点栈。
//若G无回路,则用栈T返回G的一个拓扑序列,且函数值为OK,否则返回ERROR。
{
FindInDegree(G,indegree); //对各顶点求入读;
建零入读顶点栈S;
InistStack(T);
count=0; Ve[0->G.vexnum-1