详解图的应用(最小生成树、拓扑排序、关键路径、最短路径)

2020-01-06 13:45:16王旭

为了避免重复检测入度为零的顶点,可另设一栈暂存所有入度为零的顶点。

?
  1. Status Topological Sort(ALGraph G){   //有向图G采用邻接表存储结构。  
  2. //若G无回路,则输出G的顶点的1个拓扑序列并返回OK,否则ERROR。    FindInDegree(G,indegree); //对各顶点求入度indegree[0..vernum-1]  
  3.  InitStack(S);    for(i=0;i<G.vexnum; ++i)  
  4.  if(!indegree[i])Push(S,i) //建零入度顶点栈,s入度为0者进栈    count=0; //对输出顶点计数  
  5.  while (!StackEmpty(S)) {     Pop(S,i);  
  6.   printf(i,G.vertices[i].data); ++count; //输出i号顶点并计数     for(p=G.vertices[i].firstarc;p; p=p—>nextarc) {  
  7.    k=p—>adivex; //对i号顶点的每个邻接点的入度减1      if(!(--indegree[k]))Push(S,k);//若入度减为0,则入栈  
  8.   }//for    }//while  
  9.  if(count<G.vexnum) return ERROR; //该有向图有回路    else return OK;  
  10. }//TopologicalSort 

3. 关键路径(AOE网):在AOE-网中有些活动可以并行地进行,所以完成工程的最短时间是从开始点到完成点的最长路径的长度,路径长度最长的路径叫做关键路径(Critical Path)。

3.1AOE网:(Activity on edge network)
AOE网示意图若在带权的有向图中,以顶点表示事件,以有向边表示活动,边上的权值表示活动的开销(如该活动持续的时间),则此带权的有向图称为AOE网。

3.2 实际问题:

如果用AOE网来表示一项工程,那么,仅仅考虑各个子工程之间的优先关系还不够,更多的是关心整个工程完成的最短时间是多少;哪些活动的延期将会影响整个工程的进度,而加速这些活动是否会提高整个工程的效率。因此,通常在AOE网中列出完成预定工程计划所需要进行的活动,每个活动计划完成的时间,要发生哪些事件以及这些事件与活动之间的关系,从而可以确定该项工程是否可行,估算工程完成的时间以及确定哪些活动是影响工程进度的关键。