码迷,mamicode.com
首页 > 其他好文 > 详细

uva 10305 ordering tasks(超级烂题)——yhx

时间:2016-03-15 00:32:30      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

 1 #include<cstdio>
 2 #include<cstring> 
 3 #include<stack>
 4 using namespace std;
 5 int first[110],next[10010],to[10010],n;
 6 bool b[110];
 7 stack<int> sta;
 8 void dfs(int p)
 9 {
10     int i,j,k,x,y,z;
11     for (i=first[p];i;i=next[i])
12       if (!b[to[i]]) dfs(to[i]);
13     b[p]=1;
14     sta.push(p);
15 }
16 void st()
17 {
18     int i,j,k,p,q,x,y,z;
19     memset(b,0,sizeof(b));
20     for (i=1;i<=n;i++)
21       if (!b[i]) dfs(i);
22 }
23 int main()
24 {
25     int m,i,j,k,x,y;
26     while (scanf("%d%d",&n,&m)&&(n||m))
27     {
28         memset(first,0,sizeof(first));
29         memset(next,0,sizeof(next));
30         memset(to,0,sizeof(to));
31         for (i=1;i<=m;i++)
32         {
33             scanf("%d%d",&x,&y);
34             next[i]=first[x];
35             first[x]=i;
36             to[i]=y;
37         }
38         st();
39         printf("%d",sta.top());
40         sta.pop();
41         while (!sta.empty())
42         {
43             printf(" %d",sta.top());
44             sta.pop();
45         }
46         printf("\n");
47     }
48     
49 }

 

拓扑排序,在每个没有访问过的点DFS。之后入栈。

为什么说是个烂题呢?题上没有说m的范围,所以m=0的时候不代表输入结束,不能写while (scanf()&&n&&m)。

uva 10305 ordering tasks(超级烂题)——yhx

标签:

原文地址:http://www.cnblogs.com/AwesomeOrion/p/5277722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!