拓扑排序

关于拓扑排序,基础图论中可以说是比较常见的题型,对于一些存在明显递推顺序的图论题目例如食物链计数,对于每一个结点存在一个明显的递推$f[k] = \sum(f[i])$ $f[i]$为与它连边,并且从图形上说在它上面的点的方案数,我们肯定不能直接去利用它“上面的点”的方案数,这时候我们需要一定的顺序,来实现我们的目的,这个过程称为拓扑排序。实现拓扑排序的过程有许多种,比如递归、优先队列与队列混用、单纯队列加上入度、出度数组,本人经常使用最后一种,就大概说一下实现过程。

第一步先将所有入度为0的点加入队列,然后拓展,在拓展过程中利用入度数组in[to],先对他所连点进行in[to]--操作,如果in[to]==0,就将这个点加入不断重复这一过程。

你可能感兴趣的:(拓扑排序)