# 拓扑排序简介

知识点精讲。「拓扑排序」没有新的知识点,最少需要知道:

  • 「拓扑排序」可以用于判断有向图是否存在环,如果不存在环,可以给出其中一种拓扑排序的结果;
  • 「拓扑排序」可以使用「广度优先遍历」实现,也可以使用「深度优先遍历」实现。一般而言,需要掌握「广度优先遍历」,而「深度优先遍历」绝大多数情况下不需要掌握。

拓扑排序并非一种排序算法,它能得到一个 AOV 网络的拓扑序列,用于判断 有向无环图 中是否有环,即可以判断一系列活动是否有循环依赖;

解决一个工程中的任务是否能够顺利完成,判断是否出现环。(补充:还有一种判断图中是否有环的数据结构是「并查集」)。

具体例子:去店里吃饭的问题:顾客要求先吃饭再付钱,商家要求先收钱再做菜,这就是循环依赖,拓扑排序就可以帮助我们判断是否形成环。算法 4 那本书里面就有拓扑排序。

# 「拓扑排序」的步骤

找无前驱的结点(即 入度为 的结点),一个一个地删去(使用队列),删的时候,把邻居结点的入度(即度 -1 )。需要借助队列实现。

「拓扑排序」用于对有先后顺序的任务的输出,如果先后顺序形成一个环,那么就表示这些任务头尾依赖,就永远不能完成。

因此「拓扑排序」还可以用于检测一个图中是否有环。

「力扣 」上拓扑排序目前(截止 2019 年 2 月 16 日早)一共有 5 题。


作者:liweiwei1419 链接:https://suanfa8.com/topological-sort 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Last Updated: 11/19/2024, 7:27:48 AM