拓扑序

拓扑很简单,我就不解释了,直接上代码这个我自己看的,你们看不懂就没办法了。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<stack>
 4 using namespace std;
 5 
 6 int N,M;
 7 stack<int> sk;
 8 int in[500],out[500],a[500][500];
 9 // in是入度,out是出度,a表示x点的第y条出度是指向那个点的、 
10 
11 void init()
12 {
13    int aa,bb;
14    cin>>N>>M;
15    for(int i=1;i<=M;i++){
16       cin>>aa>>bb;
17       in[bb]++;
18       a[aa][ ++out[aa] ]=bb;
19    }
20    for(int i=0;i<=N;i++)
21       if(in[i]==0){
22          sk.push(i);
23          //cout<<i<<endl;
24       }
25 }
26 
27 void work()
28 {
29    while(!sk.empty()){
30       int x=sk.top();
31       sk.pop();
32       cout<<x<<" ";
33       for(int i=1;i<=out[x];i++){
34          in[a[x][i]]--;
35          if( in[a[x][i]]==0 ){
36             sk.push(a[x][i]);
37          }
38       }
39    }
40 }
41 
42 int main()
43 {
44    init();
45    work();
46    system("pause");
47    return 0;
48 } 

 

posted on 2016-11-07 18:16  fuyun_boy  阅读(267)  评论(0)    收藏  举报

导航