偷过来的一张图 很容易理解
拓扑排序就是对于有向边(x,y),排序后x一定在y之前,每条边都是这样
过程:先算出入度为0的边,然后每次从图中移除这条边,同时他连向的点入读减一,重复这个过程。
void add(int x,int y){
ver[++tot]=y,nex[tot]=head[x],head[x]=tot;
deg[y]++;
}
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=head[x];i;i=nex[i]){
int y=ver[i];
if(--deg[y]==0) q.push(y);
}
}
}