邻接表拓扑排序算法【C/C++】

目录

  • 前言
  • 一、拓扑排序算法的思路
  • 二、实现步骤
    • 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,比较方便。


三、测试结果

自己花了一个看起来挺复杂的图,一下也看不出来有没有环

接下来是拓扑排序的结果

邻接表拓扑排序算法【C/C++】

完美!


总结

每个顶点进栈一次出战一次,度减一的操作执行了e次,所以整个算法的时间复杂度为O(n+e)。

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览35258 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月20日
下一篇 2022年6月20日

相关推荐