拓扑序
拓扑很简单,我就不解释了,直接上代码这个我自己看的,你们看不懂就没办法了。
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 }
浙公网安备 33010602011771号