拓扑排序
(1)在有向图中选一个没有前驱的顶点且输出之
(2)从图中删除该顶点和所有以它为尾的弧。
重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止,后一种情况则说明有向图中存在环。
可采用邻接表作为有向图的存储结构。具体算法如下:
- int TopoSort(ALGraph G)
- {
- FindInDegree(G,indegree); //对各顶点求入度
- InitStack(S);
- for(i=0;i<G.vexnum;++i)
- if(!indegree[i])Push(S,i); //入度为0者进栈
- count=0;
- while(!StackEmpty(S))
- {
- Pop(S,i);
- printf("i,G.vertices[i].data");
- ++count;
- for(p=G.vertices[i].firstarc; p; p=p->nextarc)
- {
- k=p->adjvex;
- if(!(--indegree[k]))Push(S,k); //若入度减为0,则入栈
- }
- }
- if(count<G.vexnum)return 0; //该有向图存在环
- else
- return 1;
- }
-
顶
本文详细介绍了拓扑排序算法的基本原理及其实现步骤。通过使用邻接表存储有向图,并结合栈来辅助处理,该算法能够有效地找出图中的顶点排序顺序。如果排序过程中发现无法继续,说明图中存在环。
2167

被折叠的 条评论
为什么被折叠?



