zoukankan      html  css  js  c++  java
  • 拓扑排序

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int maxn=50010;
    int first[maxn],to[maxn],next[maxn],cnt;
    inline int read()
    {
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
        while(isdigit(ch)){x=10*x+ch-'0';ch=getchar();}
        return x*f;
    }
    void add(int u,int v)
    {
        to[++cnt]=v;
        next[cnt]=first[u];
        first[u]=cnt;
    }
    queue<int> q;
    int rd[maxn];
    int toposort[maxn];
    int main()
    {
        int n,m;
        n=read(),m=read();
        for(int i=1;i<=m;i++)
        {
            int u,v;
            u=read(),v=read();
            add(u,v);
            rd[v]++;
        }
        int now,cnt=0;
        for(int i=1;i<=n;i++)if(!rd[i])q.push(i);
        while(!q.empty())
        {
            now=q.front();
            q.pop();
            toposort[++cnt]=now;
            for(int i=first[now];i;i=next[i])
            {
                rd[to[i]]--;
                if(!rd[to[i]])q.push(to[i]);
            }
        }
        for(int i=1;i<=cnt;i++)cout<<toposort[i]<<" ";
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    数据压缩和归档
    数据持久化
    文件和目录的使用
    数据及数据处理
    data types
    string services
    logging模块
    指导
    比较两个NSDate类型的参数相差的时间差
    推送 iOS 10
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/7756311.html
Copyright © 2011-2022 走看看