算法简介
拓扑排序
1. 相关概念
- 有向无环图:如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图.
- 拓扑排序是将有向无环图的所有顶点排成一个线性序列,使得对图中的任意两个顶点u v,如果存在边u->v,那么在序列中u一定在v前面,这个序列又被称为拓扑序列.说直白点:拓扑排序,就是用来确定事物发生的顺序的.
2. 解决问题
- 借助有向无环图描述一系列任务关系,用拓扑排序来确定这一系列任务发生的顺序
- 可以判断有向图是否存在闭环
3. 时间复杂度:
- O(N+M),N为顶点数,M为边数(因为图广度搜索共处理N个顶点,将所有顶点的度都处理到0(其实就是边的数量))
4. 算法实现:
- 可以借助图的广度优先搜索算法(BFS)
- 可以借助图的深度优先搜索算法(DFS)
5. 代码示例
-
代码示例图