拓扑排序是一个比较常用的图论算法,经常用于完成有依赖关系的任务的排序。
举个栗子:有人想要制作一件工具,但是这个工具不是一次就可以完成的,分很多个步骤,而且这些步骤是有顺序的,也就是说,假设B的顺序在A的后面,那么你就必须要先完成A再完成B,但是也有些步骤不分顺序,意思是你先做哪一个都是可以的。
面对这样的问题,我们可以把步骤建立成一张有向无环图,A指向B意思是A要在B前面完成,那么下面,我们就要找到一个顺序,来使答案符合题目要求。拓扑排序就是干这样的事情的。
拓扑排序实现思路:先从第一个没有入度的节点开始(如果有多个则任意),将此点放入队列中,并且删除与之有关的边,再重复上述步骤,直到所有的点全部进入队列,此时输出即可。