对一个AOV网进行拓扑排序(TopologicalSort)
对一个AOV网进行拓扑排序的算法有很多,下面介绍一种比较常用的一种方法的步骤:
一、算法思想:
①从AOV网中选择一个没有前驱的顶点并输出;
②从网中删除该顶点和所有以它为起点的有向边;
③重复①和②直到当前的AOV网为空或当前网中不存在无前驱的结点为止。后一种情况说明有向图中必然存在环
二、伪代码如下
1 bool TopologicalSort(Graph G){ 2 InitStack(S); //初始化一个栈,用来存放入度为零的顶点 3 for(int i = 0; i < G.vertex_num; i++) 4 if(!degree[i]) 5 Push(S,i); //将所有入度为零的顶点进栈 6 int count = 0; //用来记录当前输出的顶点数目 7 while(IsEmpty(S)){ 8 Pop(S,i); 9 print(i,G.vertices[i].data); 10 count++; //输出i号顶点并计数 11 for(p = G.vertices[i].firstarc; p; p = p->nextarc){ 12 k = p->adjvex; //对i号顶点的每个邻接点的入度减1; 13 if(!(--indegree[k])) //若入度为零,则入栈 14 Push(S,k); 15 }//for 16 }//while 17 if(count < G.vertex_num) 18 return false; //该有向图有回路 19 else 20 return true; 21 }//TopologicalSort
三、算法性能分析
时间复杂度:由于输出每个顶点的同时还要遍历以它为起点的边,故拓扑排序的时间复杂度为O(V+E)

浙公网安备 33010602011771号