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 }

 

posted @ 2017-10-06 15:29  *zzq  阅读(126)  评论(0编辑  收藏  举报