定义
关于有向无环图的一种算法。
实现
Kahn 算法
原理
Kahn 算法实际上用的是贪心算法思想,思路非常简单、好懂。定义数据结构的时候,如果 s 需要先于 t 执行,那就添加一条 s 指向 t 的边。所以,如果某个顶点入度为 0, 也就表示,没有任何顶点必须先于这个顶点执行,那么这个顶点就可以执行了。我们先从图中,找出一个入度为 0 的顶点,将其输出到拓扑排序的结果序列中(对应代码中就是把它打印出来),并且把这个顶点从图中删除(也就是把这个顶点可达的顶点的入度都减 1)。我们循环执行上面的过程,直到所有的顶点都被输出。最后输出的序列,就是满足局部依赖关系的拓扑排序。
DFS 深度优先搜索算法
深度优先遍历
适用场景
拓扑排序应用非常广泛,解决的问题的模型也非常一致。凡是需要通过局部顺序来推导全局顺序的,一般都能用拓扑排序来解决。
环的检测
记录图中被访问的节点,当被访问的节点第二次被访问到,就说明图中有环的存在。
总结
主要针对图这种数据结构的应用,要弄清楚图以下的几点操作。
TODO代码回顾与实现:
- 图深度优先
- 图广度优先
- 图是否有环的检测
- 图拓扑排序