目录
- 前言
- 一、拓扑排序算法的思路
- 二、实现步骤
-
- 1.求个顶点的入度
- 2.拓扑排序的实现
- 三、测试结果
- 总结
前言
在软件开发、施工过程、教学安排等等的一系列活动中,往往需要一个有向无环图来表示其是否成成功进行下去。
在一个有向图为顶点表示活动的 中,我们称为AOV (Activity On Vertex Network)。设G={V,E}是一个具有n个顶点的有向图,V中的顶点序列v1,v2,…,vn,满足若从顶点vi到vj有一条路径,则在顶点序列中顶点vi必在vj之前。则我们称这样的顶点为一个拓扑序列。
所谓拓扑排序,其实就是对一个有向图构造拓扑序列的过程。如果所有的顶点被输出,则说明有向图中不存在回路,反之则是有回路。
一、拓扑排序算法的思路
拓扑排序往往用在有向邻接表中,这里也就只用有向邻接表来实现。
先找出所有节点的入度。
再在AOV 中选择一个入度为0的顶点输出,然后删除此顶点,将其连接的节点的入度减一直至输出所有顶点或者AOV 中不存在入度为0的顶点为止。
二、实现步骤
1.求个顶点的入度
设置一个indegree数组来存放各个顶点的入度。
2.拓扑排序的实现
这里对栈的使用还是调用stl中的stack,比较方便。
三、测试结果
自己花了一个看起来挺复杂的图,一下也看不出来有没有环
接下来是拓扑排序的结果

完美!
总结
每个顶点进栈一次出战一次,度减一的操作执行了e次,所以整个算法的时间复杂度为O(n+e)。
文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览35258 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!