定义
有向无环图中所有点构成的序列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 );
}
}
}


京公网安备 11010502036488号