Unverified Commit e7f4fdad authored by mgt/Enter-tainer's avatar mgt/Enter-tainer Committed by GitHub
Browse files

Merge pull request #2663 from zhb2000/patch-1

parents 2ad43ba8 05808d53
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -16,11 +16,11 @@

## Kahn 算法

入度为 $0$ 的点组成一个集合 $S$ 
初始状态下,集合 $S$ 装着所有入度为 $0$ 的点 $L$ 是一个空列表。

每次从 $S$ 里面取出一个点 $u$ (可以随便取)放入 $L$ , 然后遍历顶点 $u$ 的所有边 $(u, v_1), (u, v_2), (u, v_3) \cdots$ , 并删除,并判断如果该边的另一个顶点,如果在移除这一条边后入度为 $0$ , 那么就将这个顶点放入集合 $L$ 中。不断地重复取出顶点然后……
每次从 $S$ 取出一个点 $u$ (可以随便取)放入 $L$ , 然后 $u$ 的所有边 $(u, v_1), (u, v_2), (u, v_3) \cdots$ 删除。对于边 $(u, v)$ ,若将该边删除后点 $v$ 的入度为 $0$ ,则将 $v$ 放入 $S$ 中。

最后当集合为空后,就检查图中是否存在任何边如果有,那么这个图一定有环路,否返回 $L$ , $L$ 中顺序就是拓扑排序的结果
不断重复以上过程,直到集合 $S$ 为空。检查图中是否存在任何边如果有,那么这个图一定有环路,否返回 $L$ , $L$ 中顶点的顺序就是拓扑排序的结果

首先看来自 [Wikipedia](https://en.wikipedia.org/wiki/Topological_sorting#Kahn's_algorithm) 的伪代码

@@ -40,7 +40,7 @@ else
    return L (a topologically sortedorder)
```

代码的核心是,是维持一个入度为 0 的顶点。
代码的核心是维持一个入度为 0 的顶点的集合

可以参考该图