环的判断
拓扑 / 统计度
求出所有结点的度。(无向图不区分入度和出度)
将所有入度为0的结点入队。(可视为根节点)
循环弹出队首元素,把与队首元素相邻节点的入度减1。如果相邻节点的入度变为0,则将其入队。
如果存在元素未入队,则说明有环。
以上图为例,循环结束后,2, 3, 4
的入度为 2
,不满足进队列的条件而被剩下,说明有环。
DFS
遍历每个点,以每个点为起点,进行
DFS
。如果起点之前被访问过了,则跳过DFS
期间如果有节点在本轮遍历中被访问过了,说明有环可以用三色标记法实现:
为啥需要黑色节点?因为如果只用两个颜色,如下情况中的3会被误判:
并查集
其实思路和 DFS
差不多。
遍历每个起点
i
,对其DFS
。把DFS
到的子节点的parent
指向i
。DFS
别的起点时,如果有的子节点已经有parent
了,说明存在环
Samples
Course Schedule
Course Schedule II
Find Eventual Safe States
Last updated