TOPSORT拓扑排序

偷过来的一张图 很容易理解在这里插入图片描述
拓扑排序就是对于有向边(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);
        }
    }
}
发布了38 篇原创文章 · 获赞 5 · 访问量 845

猜你喜欢

转载自blog.csdn.net/Fooooooo/article/details/104174573