前言
摘自《算法竞赛进阶指南》。
(~)
拓扑排序
给定一张有向无环图,若一个由图中所有点构成的序列 (A) 满足:对于图中的每条边 ((x,y)) ,(x) 在 (A) 中都出现在 (y) 之前,则称 (A) 是该有向无环图顶点的一个拓扑序,求解序列 (A) 的过程就成为拓扑排序。
(~)
过程
- 建立空的拓扑序列 (A) 。
- 预处理出所有点的入度
deg[i]
,起初把所有入度为 (0) 的店入队。 - 取出队头节点 (x) ,把 (x) 加入拓扑排序 (A) 的末尾。
- 对于从 (x) 出发的每条边 ((x,y)) ,把 (deg[i]) 减 (1) 。若被减为 (0) ,则把 (y) 入队。
- 重复 (3 sim 4) 步直到队列为空,此时 (A) 即为所求。
(~)
性质
- 可以判环。
- 将拓扑序反着来,可以优先处理每个节点的后继节点的信息。
(~)
结语
写的很草率,神仙不要 D 我。