Top sort 双队列

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int num[100];
int main()
{
    queue<int>q;
    queue<int>ans;
    int n,m;
    cin>>n>>m;
    int x,y;
    vector<int>u[100];
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        u[x].push_back(y);
        num[y]++;
    }
    for(int i=0;i<n;i++){
        if(num[i]==0){q.push(i);}
    }
    while(!q.empty()){
        int k=q.front();q.pop();ans.push(k);
        for(int i=0;i<u[k].size();i++){
            num[u[k][i]]--;
            if(num[u[k][i]]==0){q.push(u[k][i]);}
        }
    }
    while(!ans.empty()){
        cout<<ans.front()<<endl;
        ans.pop();
    }
}

 

posted @ 2018-06-06 10:30  断腿三郎  阅读(171)  评论(0编辑  收藏  举报