uva 10305 拓扑排序裸题
Posted zzq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva 10305 拓扑排序裸题相关的知识,希望对你有一定的参考价值。
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 拓扑排序裸题的主要内容,如果未能解决你的问题,请参考以下文章
[拓扑排序]Ordering Tasks UVA - 10305