拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序。获得一个拓扑序的过程就是拓扑排序。AOV如果有合理的拓扑序,则必定是有向无环图(Directed Acyclic Graph,DAG)
每次输出没有前驱顶点的课程。即输出入度为0的顶点。
void TopSort()
{ for(cnt=0;cnt<|V|;cnt++)
{ V=未输出的入度为0的顶点;
if(这样的点不存在)
{cout<<"图中有回路”;
break;
}
输出v,或者记录V的输出编号;
for(V的每个邻接点w)
Indegree[w]--;
}
}
随时将入度为0的顶点放入一个容器中
void TopSort()
{ for(图中每个顶点)
if(Indegree[V]==0)
Enqueue(V,Q);
while(!IsEmpty(Q))
{ V=Dequeue(Q);
输出V,cnt++;
for(V的每个邻接点w)
if(--Indegree[W]==0)
Enqueue(W,Q);
}
if(cnt!=|V|)
cout<<"图中有回路";
}
关键路径问题
AOE(Activity On Edge)网络
一般用于安排项目的工序
D<I,J>=Latest[j]-Earliest[i]-C<i,j>//机动时间
关键路径:由绝对不允许延误的活动组成的路径,如将关键路径加快进度,则整个项目就能提前完工。