zoukankan      html  css  js  c++  java
  • UVa 10305 Ordering Tasks

      有n件事事情要做,它们有m个完成先后顺序,求出一个它们完成的先后顺序,即拓扑排序。

      套用代码即可,不过开始的时候while内条件写的是 while(scanf("%d%", &n, &m) != EOF && n &&m)  结果WA了,怎么都想不明白怎么会错了,后来发现会有n!=0&&m=0的情况出现,不过这样的话它们不是相互独立了吗?当时想当然的就没考虑这种情况,以后还是老老实实地按照题目给的要求吧...

      代码如下:

    View Code
     1 #include <cstdio>
     2 #include <cstring>
     3 
     4 const int maxn = 110;
     5 int n, m;
     6 int G[maxn][maxn], topo[maxn];
     7 int c[maxn], t;
     8 
     9 bool dfs(int u)
    10 {
    11     c[u] = -1;
    12     for(int v = 1; v <= n; v++)
    13         if(G[u][v])
    14         {
    15             if(c[v] < 0)   return false;
    16             else if(!c[v] && !dfs(v))   return false;
    17         }
    18     c[u] = 1;
    19     topo[--t] = u;
    20     return true;
    21 }
    22 
    23 bool toposort()
    24 {
    25     t = n;
    26     memset(c, 0, sizeof(c));
    27     for(int u = 1; u <= n; u++)
    28         if(!c[u])
    29             if(!dfs(u))  return false;
    30     return true;
    31 }
    32 
    33 int main()
    34 {
    35 #ifdef LOCAL    
    36     freopen("in", "r", stdin);
    37 #endif
    38     while(scanf("%d%d", &n, &m) != EOF )
    39     {
    40         if(!m && !n)   break;
    41         int u, v;
    42         memset(G, 0, sizeof(G));
    43         while(m--)
    44         {
    45             scanf("%d%d", &u, &v);
    46             G[u][v] = 1;
    47         }
    48         toposort();
    49         for(int i = 0; i < n; i++)
    50         {
    51             printf("%s", i ? " " : "");
    52             printf("%d", topo[i]);
    53         }
    54         printf("\n");
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    css 笔记
    解决谷歌浏览器中的input背景色默认是黄色
    lunbo
    操作json进行分组再组
    点击返回顶部
    关于有的手机浏览器下载APK时会成TXT
    火狐浏览器jsonshow插件
    微信web开发者工具
    浏览器UA
    click多次注册事件会导致一个事件被触发多次的解决方法
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3047565.html
Copyright © 2011-2022 走看看