1.什么是拓扑排序
- 拓扑排序就是将偏序关系转换为全序关系的过程了
- 下图是一个AOV偏序关系的图
- 其中节点代表活动
- 有向边代表活动之间的序关系
- 拓扑排序就是将该序关系得到一个全序输出的过程
2.如何对一个AOV网络进行拓扑排序呢
- 首先在有向图中选取一个没有前驱节点的顶点输出之
- 在图中删除该顶点的所有和它以尾的弧
- 重复上述过程直到全部顶点已经输出,或者图中不存在无前驱节点的顶点为止。后一种情况寿命有向图中存在环。
3.算法伪代码描述:
bool TopologicalOrder(ALGraph& G,Stack&T)
{
FInd(degree[MaxVertax],G );//对所有节点球好初始的入度然后放在这个数组里面
Stack S;//T为拓扑序列顶点栈,S为零入度顶点栈
Init(S);//将入度为0的节点入栈。
int count=0;
while (!T.IsEmpty())
{
int j=Pop(s);
T.Push(j);++count;
PtrToAdjNode p;
for(p=G.Adjlist[j].First_Edge;p;p=p->Next)
{
--degree[p->Adjvex]
if(degree[p->Adjvex]==0)
S.Push(p->Adjvex);
}
}
if(count<G.vexnum)
return false;
else
return true;
}