zoukankan      html  css  js  c++  java
  • hdu1285拓扑排序

     1 #include "iostream"
     2 #include "vector"
     3 #include "memory.h"
     4 #include "cstdio"
     5 using namespace std;
     6 #define swap(a,b,t) ( (t) = (x),(x) = (y),(y) = (t) )
     7 #define MAXN 510
     8 int G[MAXN][MAXN];
     9 int indegree[MAXN];
    10 int ans[MAXN],t;
    11 int n,m;
    12 
    13 bool toposort()
    14 {
    15     for (int i = 0;i <= n; ++ i)
    16         for (int j = 0;j <= n; ++ j) {
    17             if(G[i][j]) indegree[j]++;
    18     }
    19     for (int i = 0;i < n; ++ i) {
    20         int num = 1;
    21         while (indegree[num] != 0)
    22             num ++;
    23         ans[i] = num;
    24         indegree[num] = -1;
    25         for (int j = 0;j <= n; ++ j) {
    26             if (G[num][j] == 1) indegree[j]--;
    27         }
    28     }
    29     return true;
    30 }
    31 
    32 
    33 int main()
    34 {
    35     while (cin >> n >> m) {
    36         memset(indegree,0,sizeof(indegree));
    37         memset(G,0,sizeof(G));
    38         memset(ans,0,sizeof(ans));
    39         for (int i = 0;i < m; ++ i) {
    40             int a,b;
    41             cin >> a >> b;
    42             G[a][b] = 1;
    43         }
    44         if (toposort()) {
    45             for (int i = 0;i < n; ++ i) {
    46                 cout << ans[i];
    47                 if (i != n-1) cout << " ";
    48                 else cout << endl;
    49             }
    50         }
    51     }
    52     return 0;
    53 }
    DFS
     1 #include "iostream"
     2 #include "vector"
     3 #include "memory.h"
     4 #include "cstdio"
     5 using namespace std;
     6 #define swap(a,b,t) ( (t) = (x),(x) = (y),(y) = (t) )
     7 #define MAXN 510
     8 int G[MAXN][MAXN];
     9 int indegree[MAXN];
    10 int ans[MAXN],t;
    11 int n,m;
    12 
    13 bool toposort()
    14 {
    15     for (int i = 0;i <= n; ++ i)
    16         for (int j = 0;j <= n; ++ j) {
    17             if(G[i][j]) indegree[j]++;
    18     }
    19     for (int i = 0;i < n; ++ i) {
    20         int num = 1;
    21         while (indegree[num] != 0)
    22             num ++;
    23         ans[i] = num;
    24         indegree[num] = -1;
    25         for (int j = 0;j <= n; ++ j) {
    26             if (G[num][j] == 1) indegree[j]--;
    27         }
    28     }
    29     return true;
    30 }
    31 
    32 
    33 int main()
    34 {
    35     while (cin >> n >> m) {
    36         memset(indegree,0,sizeof(indegree));
    37         memset(G,0,sizeof(G));
    38         memset(ans,0,sizeof(ans));
    39         for (int i = 0;i < m; ++ i) {
    40             int a,b;
    41             cin >> a >> b;
    42             G[a][b] = 1;
    43         }
    44         if (toposort()) {
    45             for (int i = 0;i < n; ++ i) {
    46                 cout << ans[i];
    47                 if (i != n-1) cout << " ";
    48                 else cout << endl;
    49             }
    50         }
    51     }
    52     return 0;
    53 }
    暴力
  • 相关阅读:
    如何让dapper支持oracle游标呢?
    使用Polly让程序有Retry的机制
    js代码优化
    学习simple.data之基础篇
    如何在.net4.0中使用.net4.5的async/await
    异步导出excel
    让人蛋疼的“Oracle.DataAccess.dll”
    关于函数和方法总结
    linux和windows的区别
    01-linux软件包管理器安装和编译安装
  • 原文地址:https://www.cnblogs.com/usedrosee/p/4240245.html
Copyright © 2011-2022 走看看