# 拓扑排序简介
知识点精讲。「拓扑排序」没有新的知识点,最少需要知道:
- 「拓扑排序」可以用于判断有向图是否存在环,如果不存在环,可以给出其中一种拓扑排序的结果;
- 「拓扑排序」可以使用「广度优先遍历」实现,也可以使用「深度优先遍历」实现。一般而言,需要掌握「广度优先遍历」,而「深度优先遍历」绝大多数情况下不需要掌握。
拓扑排序并非一种排序算法,它能得到一个 AOV 网络的拓扑序列,用于判断 有向无环图 中是否有环,即可以判断一系列活动是否有循环依赖;
解决一个工程中的任务是否能够顺利完成,判断是否出现环。(补充:还有一种判断图中是否有环的数据结构是「并查集」)。
具体例子:去店里吃饭的问题:顾客要求先吃饭再付钱,商家要求先收钱再做菜,这就是循环依赖,拓扑排序就可以帮助我们判断是否形成环。算法 4 那本书里面就有拓扑排序。
# 「拓扑排序」的步骤
找无前驱的结点(即 入度为
「拓扑排序」用于对有先后顺序的任务的输出,如果先后顺序形成一个环,那么就表示这些任务头尾依赖,就永远不能完成。
因此「拓扑排序」还可以用于检测一个图中是否有环。
「力扣 」上拓扑排序目前(截止 2019 年 2 月 16 日早)一共有 5 题。
作者:liweiwei1419 链接:https://suanfa8.com/topological-sort 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。