为了避免重复检测入度为零的顶点,可另设一栈暂存所有入度为零的顶点。
?
- Status Topological Sort(ALGraph G){ //有向图G采用邻接表存储结构。
- //若G无回路,则输出G的顶点的1个拓扑序列并返回OK,否则ERROR。 FindInDegree(G,indegree); //对各顶点求入度indegree[0..vernum-1]
- InitStack(S); for(i=0;i<G.vexnum; ++i)
- if(!indegree[i])Push(S,i) //建零入度顶点栈,s入度为0者进栈 count=0; //对输出顶点计数
- while (!StackEmpty(S)) { Pop(S,i);
- printf(i,G.vertices[i].data); ++count; //输出i号顶点并计数 for(p=G.vertices[i].firstarc;p; p=p—>nextarc) {
- k=p—>adivex; //对i号顶点的每个邻接点的入度减1 if(!(--indegree[k]))Push(S,k);//若入度减为0,则入栈
- }//for }//while
- if(count<G.vexnum) return ERROR; //该有向图有回路 else return OK;
- }//TopologicalSort
3. 关键路径(AOE网):在AOE-网中有些活动可以并行地进行,所以完成工程的最短时间是从开始点到完成点的最长路径的长度,路径长度最长的路径叫做关键路径(Critical Path)。
3.1AOE网:(Activity on edge network)
AOE网示意图若在带权的有向图中,以顶点表示事件,以有向边表示活动,边上的权值表示活动的开销(如该活动持续的时间),则此带权的有向图称为AOE网。
3.2 实际问题:
如果用AOE网来表示一项工程,那么,仅仅考虑各个子工程之间的优先关系还不够,更多的是关心整个工程完成的最短时间是多少;哪些活动的延期将会影响整个工程的进度,而加速这些活动是否会提高整个工程的效率。因此,通常在AOE网中列出完成预定工程计划所需要进行的活动,每个活动计划完成的时间,要发生哪些事件以及这些事件与活动之间的关系,从而可以确定该项工程是否可行,估算工程完成的时间以及确定哪些活动是影响工程进度的关键。










