复杂度O(V+E)
指将一个有向无环图G的所有顶点排成一个线性序列,使得有向无环图G的 边集 中的任意一条边<u,v>始终满足u出现在v的前面。
如,有a、b、c、d等事情,a优先级最高,bc优先级相同,d优先级最低,表示为a→(b,c)→d,则abcd和acbd都是可行的排序。
将abcd对应图中的点,先后关系对应有向边,问题对应一个有先后关系的排序,即拓扑排序。
拓扑排序是DFS和BFS的一个应用。
点的出度和入度:
出度:以点u为起点的边的数量称为u的出度。
入度:以点u为终点的边的数量称为u的入度。
入度为0,是起点,排在最前面,无前驱,优先度最高。
出度为0,是终点,排在最后面,无后继,优先度最低。
无解的判断:
队列已空,但是还有点未进入队列,那么这些点的入度都不是0,说明图不是DAG(也就是 Directed Acyclic Graph 有向无环图),不存在拓扑排序。
1270
代码:
不会