快速上手 C++ 数据结构与算法
王健伟
《C++ 新经典》系列作者,资深 C++ 讲师
3224 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
结束语 (1讲)
快速上手 C++ 数据结构与算法
15
15
1.0x
00:00/00:00
登录|注册

31|图的应用:如何通过拓扑排序找到合理的先后顺序?

你好,我是王健伟。
在我和你分享了两个图的应用,最小生成树和最短路径相关的算法之后,我们来说说拓扑排序。
拓扑排序主要是解决一个工程能否按顺序进行的问题。在正式讲解之前,我们首先来一起认识一下几个基本概念。

拓扑排序基本概念

首先,有向无环图(Directed Acyclic Graph,简称 DAG),这是一种特殊的有向图。如果一个有向图中不存在环,那就叫做有向无环图。
其次,AOV 网(Activity On Vertex Network)。在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程。一个工程常被分为多个小的子工程,这些子工程被称为活动(Activity)
在有向图中,如果以顶点表示活动,有向边(弧)表示活动之间的先后关系,那么这样的有向图就叫做顶点表示活动的网,简称为 AOV 网。AOV 网就是我们刚刚说的有向无环图。AOV 网的边不设权值,如果存在两个顶点之间的边 <vi,vj>,那就表示活动 i 必然发生在活动 j 之前。你可以理解为活动之间存在制约关系。
最后,拓扑排序。对于一个有向无环图,满足若从顶点 vi 到顶点 vj 有一条路径,则在顶点序列中顶点 vi 必然在顶点 vj 之前,这样的顶点序列称为一个拓扑序列
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

拓扑排序是解决工程顺序进行问题的重要方法,适用于有向无环图,通过构造拓扑序列来确定合理的先后顺序。本文首先介绍了有向无环图和AOV网的概念,以及拓扑排序的关键要点。通过生动的做菜例子,深入浅出地解释了拓扑排序的应用。在实现方法方面,文章提到了从AOV网中选择入度为0的顶点并输出,然后删除相关边的步骤。同时,也指出了当图中存在环时,无法完全输出所有顶点的情况。文章还提供了拓扑排序的实现代码,并讨论了不同存储结构对算法时间复杂度的影响。此外,还介绍了逆拓扑排序算法的实现思路。总之,本文通过实例和代码演示,全面介绍了拓扑排序的概念、应用和实现方法,对于想要了解工程顺序安排的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快速上手 C++ 数据结构与算法》
新⼈⾸单¥68
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部