1. 程式人生 > >uva 10305 拓撲排序裸題

uva 10305 拓撲排序裸題

ont emp put out 拓撲排序 class main ref 隊列

https://vjudge.net/problem/UVA-10305

目前沒學dfs做法,用的隊列做法,每次找到一個入度為零的點出隊後更新其他點,再加入入度為零的點直到查找完畢,這個題目顯然一定有解不必考慮無解的情況。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int in[105];
 4 bool e[105][105];
 5 int main()
 6 {
 7     int n,m,i,j,k;
 8     while(cin>>n>>m&&(n||m)){j=0
; 9 queue<int>q; 10 memset(in,0,sizeof(in)); 11 memset(e,0,sizeof(e)); 12 int a,b; 13 for(i=1;i<=m;++i) 14 { 15 cin>>a>>b; 16 e[a][b]=1; 17 in[b]++; 18 } 19 for(i=1;i<=n;++i) 20 {
21 if(in[i]==0) q.push(i); 22 } 23 while(!q.empty()){ 24 int u=q.front();q.pop(); 25 if(j==0) {j++;cout<<u;} 26 else cout<< <<u; 27 for(i=1;i<=n;++i) 28 { 29 if(e[u][i]){ 30 in
[i]--; 31 if(in[i]==0){ 32 q.push(i); 33 } 34 } 35 } 36 }puts(""); 37 } 38 return 0; 39 }

uva 10305 拓撲排序裸題