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

来源:互联网 发布:烟花算法程序 编辑:程序博客网 时间:2024/05/21 06:43

 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)。

0 0
原创粉丝点击