拓补排序
1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 int mp[200][200]; 5 int degree[200]; 6 queue<int>que; 7 int main(){ 8 int n,a,c; 9 cin>>n; 10 for(int i=1;i<=n;i++){ 11 while(cin>>a&&a){ 12 if(mp[i][a]==0){ 13 mp[i][a]=1; 14 degree[a]++; 15 } 16 } 17 } 18 for(int i=1;i<=n;i++){ 19 if(degree[i]==0){ 20 que.push(i); 21 } 22 } 23 while(!que.empty()){ 24 c=que.front(); 25 que.pop(); 26 for(int i=1;i<=n;i++){ 27 if(mp[c][i]==1){ 28 degree[i]--; 29 if(degree[i]==0){ 30 que.push(i); 31 } 32 } 33 } 34 if(que.empty()){ 35 cout<<c; 36 } 37 else{ 38 cout<<c<<" "; 39 } 40 } 41 cout<<endl; 42 return 0; 43 }