思路:

拓扑排序,这里是用染色的dfs实现的。在有环的情况下可以判断出来,没有环的情况下输出拓扑排序序列。

实现:

 1 #include <vector>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #define w 0
 6 #define g 1
 7 #define b 2
 8 using namespace std;
 9 const int N = 105;
10 int G[N][N];
11 vector<int> res, vis;
12 bool cycle;
13 int n, m;
14 void init()
15 {
16     cycle = false;
17     cin >> n;
18     memset(G, 0, sizeof G);
19     for (int i = 0; i <= n; i++) vis.push_back(w);
20     int x;
21     for (int i = 1; i <= n; i++)
22     {
23         while (cin >> x, x)
24         {
25             G[i][x] = 1;
26         }
27     }
28 }
29 void dfs(int u)
30 {
31     if (vis[u] == b) return;
32     if (vis[u] == g) { cycle = true; return; }
33     vis[u] = g;
34     for (int i = n; i >= 1; i--)
35     {
36         if (G[u][i]) dfs(i);
37     }
38     vis[u] = b;
39     res.push_back(u);
40     return;
41 }
42 void topsort()
43 {
44     for (int i = n; i >= 1; i--)
45     {
46         if (vis[i] == w) dfs(i);
47     }
48     reverse(res.begin(), res.end());
49 }
50 int main()
51 {
52     init();
53     topsort();
54     if (cycle) cout << "There is a cycle in G!" << endl;
55     else
56     {
57         for (int i = 0; i < res.size(); i++)
58             cout << res[i] << " ";
59         cout << endl;
60     }
61     return 0;
62 }

转载于:https://www.cnblogs.com/wangyiming/p/7617959.html

poj2367 Genealogical tree相关推荐

  1. URAL 1022 Genealogical tree

    [报告]    非常非常裸的拓扑排序-- 估计网上面随便拉个拓扑排序的程序,把输入改下都可以用. 本来这道题目可以用链表做,但C++的链表我用不来-- [程序] // TASK: 1022 Genea ...

  2. 图论之拓扑排序 poj 2367 Genealogical tree

    题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...

  3. POJ 2367 Genealogical tree【拓扑排序】

    题意:大概意思是--有一个家族聚集在一起,现在由家族里面的人讲话,辈分高的人先讲话.现在给出n,然后再给出n行数 第i行输入的数表示的意思是第i行的子孙是哪些数,然后这些数排在i的后面. 比如样例 5 ...

  4. ICPC程序设计题解书籍系列之五:吴永辉:《数据结构编程实验》(第2版)

    第1章 简单计算 UVALive2362 POJ1004 HDU1064 ZOJ1048 Financial Management[数学+水题] - 海岛Blog - CSDN博客 POJ1552 H ...

  5. 图论 —— AOV 网与拓扑排序

    [AOV网] 日常生活中,一项大的工程可以看作是由若干个子工程组成的集合,这些子工程之间必定存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始. 我们用有向图来表现子工程之间的先后关 ...

  6. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  7. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  8. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  9. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

最新文章

  1. 【FFmpeg】ffmpeg命令详解(一)
  2. 进程、线程和上下文切换
  3. BZOJ5358: [Lydsy1805月赛]口算训练
  4. mysql主从搭建配置(mysql version5.7.22)
  5. 剑指offer1:二维数组中的查找
  6. 云小课|3种常用Git工作流推荐
  7. MATLAB 符号运算
  8. JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)(4)
  9. H5 Canvas实现荣誉证书生成器
  10. printf函数,fprintf函数,sprintf函数
  11. 打包AS中的APK文件
  12. 12 JAVA编程思想——集合的类型
  13. 用Facebook做广告和营销,你需要注意哪些问题?
  14. 牛客网实战项目详细到每一步(更新中)
  15. Vue脚手架创建项目流程
  16. python导入库的方式有几种_python库导入的三种方式
  17. 基础SQL Server 操作问题——对象‘主键’依赖于列‘ID’/标识列‘ID’的数据类型必须是int,bigint,smallint等
  18. OpenSSL之调用EVP框架实现AES多种加密模式
  19. 计算机系素描教材,[计算机软件及应用]素描基础教程PPT.ppt
  20. 网页录屏怎么录制?有哪些好用的录屏方法?

热门文章

  1. 【源码】net_device结构
  2. ASP.NET中实现Flash与.NET的紧密集成(转,没看,有空研究一下)
  3. java.lang.NumberFormatException: For input string: “xxxx.“
  4. Intellij代码界面导入maven工程,且该maven工程不具备intellij配置文件
  5. django的数据库名字和models.py中类名的对应关系
  6. ubuntu19.10安装阿里旺旺
  7. RStudio修改快捷键确保每次运行都是从头运行所有代码
  8. sklearn的KNN文档中实例代码的注释
  9. hexo右下角弄一个live2d的卡通动画小人
  10. python2.7调用mysql存储过程并且返回结果