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

    大概解决问题:给定优先级关系,输出依次顺序

    方法:先把最低级的放入vector,最后反向输出即可。

    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN=30030;
    bool vis[MAXN];
    int in[MAXN];
    int ans;
    vector<int> edge[MAXN];
    int main()
    {
        int T;
        cin>>T;
        int n,m,a,b;
        while(T--)
        {
            scanf("%d%d",&n,&m);
            memset(in,0,sizeof(in));
            for (int i=1;i<=n;i++) edge[i].clear();
            for (int i=0;i<m;i++)
            {
                scanf("%d%d",&a,&b);
                in[a]++;
                edge[b].push_back(a);
            }
            priority_queue<int>q;
            for (int i=1;i<=n;i++)
            {
                if(!in[i])
                q.push(i);
            }
            vector<int>v;
            ans=0;
            while(!q.empty())
            {
                ans++;
                a=q.top();
                v.push_back(a);
                cout<<a<<" 进队"<<endl;
                q.pop();
                vis[a]=1;
                for (int i=0;i<edge[a].size();i++)
                {
                    b=edge[a][i];
                    in[b]--;
                    if (!in[b]) q.push(b);
                }
            }
            for (int i=v.size()-1;i>=0;i--)
            {
                if (i!=v.size()-1) printf(" ");
                printf("%d",v[i]);
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    BeanUtils在web项目中的应用
    BeanUtils的日期问题
    使用BeanUtils组件
    调用数据库过程函数mysql
    sql注入
    如何取SO中的特性
    Read config detail from SO
    Parts-Ufida ERP project 1
    常用医疗英语
    April 24th 2020
  • 原文地址:https://www.cnblogs.com/lhlccc/p/11876142.html
Copyright © 2011-2022 走看看