题目
如何判断图中是否有环(拓扑排序)
答案
拓扑排序是指对一个**有向无环图**的节点进行排序之后得到的序列。
**如果存在一条从节点 A 指向节点 B 的边,那么在拓扑排序的序列中节点 A 出现在节点 B 的前面**。
一个有向无环图可以有一个或多个拓扑排序序列,但无向图或有环的有向图都不存在拓扑排序。
一种常用的拓扑排序算法是**每次从有向无环图中取出一个`入度`为 0 的节点添加到拓扑排序序列之中,然后删除该节点及所有以它为起点的边**。重复这个步骤,直到图为空或图中不存在入度为 0 的节点
- 如果最终图为空,那么图是有向无环图,此时就找到了该图的一个拓扑排序序列
- 如果最终图不为空并且已经不存在入度为 0 的节点,那么图中一定有环(可以使用拓扑排序来判断一个有向图是否有环)。比如下图就是一个有环的有向图

下图(a)的拓扑排序序列为 [1,2,3,4,5]

