Uva 10305 Ordering Tasks(拓扑排序模版题)
#include<iostream> #include<queue> #define pb push_back #define fio ios::sync_with_stdio(false);cin.tie(0) using namespace std; const double pi=acos(-1.0); const int N=1e2+5; using namespace std; int n,m; int du[N]; vector<int>vec[N]; queue<int>q; void topo(){ int tot=0; while(!q.empty()){ int x=q.front(); q.pop(); tot++; if(tot!=n) cout<<x<<" "; else cout<<x<<endl; for(int i=0;i<vec[x].size();i++){ if(--du[vec[x][i]]==0)q.push(vec[x][i]); } } } int main(){ fio; while(cin>>n>>m&&n+m){ for(int i=1;i<=n;i++)vec[i].clear(),du[i]=0; for(int i=0;i<m;i++){ int u,v; cin>>u>>v; vec[u].pb(v); du[v]++; } for(int i=1;i<=n;i++){ if(du[i]==0)q.push(i); } topo(); } return 0; }