定义 有向无环图中所有点构成的序列A满足对于图中每条边(x,y) x在A中总出现在y之前,则A是该图的一个拓扑序 求解A的过程就称为拓扑排序 bfs 核心:不断选择入度为 0 的点 x ,然后把 x 连向点的入度减 1 建立空拓扑序A 预处理所有点入度d[i],把所有入读为0的点入队 取出队头节点x,把x加入拓扑序列A的末尾 对于从x出发的每条边(x,y),把d[y]-1,若被减为0,则把y入队 重复上两步直至队列为空 code void topsort() { queue<int> q; for( int i = 1; i <= n; i ++ ) if( deg[i] == 0 ) q.push( i ); while( q.size() ) { int x = q.front(); q.pop(); a[++ cnt] = x; for( int i = h[x]; i; i = ne[i] ) { int y = e[i]; deg[y] --; if( deg[y] == 0 ) q.push( y ); } } }