环检测 & 拓扑排序

207. 课程表

210. 课程表 II

 

本篇文章主要介绍「环检测」和「拓扑排序」的相关内容

在看本文章之前,最好先去看完文章 图的遍历。对于「无环图的遍历」「有环图的遍历」 以及「如何构建图的邻接表」在其中都有提及

环检测

顾名思义,环检测就是判断一个图是否存在环,题目详情可见 课程表

这里介绍两种方式:「DFS」和「BFS」。关于「DFS」详细内容可见 回溯 (DFS) 算法框架关于「BFS」详细内容可见 BFS 算法框架

环检测 DFS 方法

环检测 BFS 方法

原理:入度为 0 的节点即可加入拓扑序列中

拓扑排序

节点间存在先后关系,以一种保证节点间先后顺序的方式来排序。只有当节点的先行节点完成后,当前节点才可以进入处理阶段

15

如上图所示,该图的拓扑排序为:A -> B -> C -> E -> D -> F -> G

解释:G 必须在 E,F 完成后才可以进行

强调:存在环的图没有拓扑排序

题目详情可见 课程表 II

拓扑排序 DFS 方法

拓扑排序是后序遍历的倒序

原因:后序遍历的特点:先遍历左右节点,后遍历根节点;同时从叶子节点开始逐渐向上

而拓扑排序的特点:先访问根后,才可以访问孩子节点

拓扑排序 BFS 方法