拓补排序

 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 }

 

posted @ 2019-10-28 17:45  yya雨  阅读(88)  评论(0编辑  收藏  举报