题意:给你n个点、m个关系,每个关系两个点u、v,表示u小于v,叫你输出任意一个序列保证满足所有给定的关系

   例如:n=3 m=2

      1 2

      3 1

      3 2

      3 1 2

题解:拓扑排序排的是一个有向无环图(DAG),首先没有回路,否则会失败,其次如果存在G(u,v),则在该序列中u在v前面

   实现方法就是遍历每个点,当此点没被标记过就进入递归

   然后将此点看做树的根节点(DAG其实可以看做森林),遍历它可以到的所有点,最后从后向前将点加入排序的序列并标记

#include<cstdio>
#include<cstring>
const int Max=105;
int graph[Max][Max];
int topo[Max];
int vis[Max],t;
bool topoDfs(int u,int n)//进入u极其u的后面所有点
{vis[u]=-1;//表示正在访问for(int v=1; v<=n; ++v){if(graph[u][v]){if(vis[v]==-1)//有环return false;if(!vis[v]&&!topoDfs(v,n))//没被访问过才进入return false;}}vis[u]=1;//表示已经访问过topo[--t]=u;//注意加入后面return true;
}
void topoSort(int n)
{memset(vis,0,sizeof(vis));t=n;for(int i=1; i<=n; ++i){if(!vis[i])//表示没有访问过它极其它后面的节点
        {if(!topoDfs(i,n))//此点极其它后面的点都进dfs
            {return ;//图是有环的
            }}}
}
int main()
{int n,m;while(~scanf("%d %d",&n,&m)&&(n+m)){for(int i=0; i<=n; ++i){for(int j=0; j<=n; ++j){graph[i][j]=0;}}int u,v;for(int i=0; i<m; ++i){scanf("%d %d",&u,&v);graph[u][v]=1;}topoSort(n);for(int i=0; i<n; ++i){printf("%d%c",topo[i],i==n-1?'\n':' ');}}
}

转载于:https://www.cnblogs.com/zhuanzhuruyi/p/6764028.html

UVA 10305 Ordering Tasks (拓扑排序)相关推荐

  1. Uva 10305 - Ordering Tasks

    Problem F: Ordering Tasks Input: standard input; Output: standard output Time Limit: 1 second;  Memo ...

  2. UVa 1572 Self-Assembly (拓扑排序)

    题目链接: https://cn.vjudge.net/problem/UVA-1572 Automatic Chemical Manufacturing is experimenting with ...

  3. Ordering Tasks UVA - 10305(拓扑排序)

    在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点. 先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一. 一直做改操作,直到所有的节点都被 ...

  4. 【刘汝佳可运行代码】Ordering Tasks UVA - 10305【两种解法】

    立志用最少的代码做最高效的表达 John has n tasks to do. Unfortunately, the tasks are not independent and the executi ...

  5. Uva 10305 给任务排序

    题目链接:https://uva.onlinejudge.org/external/103/10305.pdf 紫书P167 拓扑排序. dfs--从一个点出发,dfs 与之相连的所有点,把本身放入到 ...

  6. 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)

    [Solution] 接上一篇,在处理有向无环图的最长链问题的时候,可以在做拓扑排序的同时,一边做DP; 设f[i]表示第i个方块作为最上面的最高值; f[y]=max(f[y],f[x]+h[y]) ...

  7. python 拓扑排序_拓扑排序(topsort)算法详解

    在图论中,由某个集合上的偏序得到全序的策略就是拓补排序算法.拓扑排序常出现在涉及偏序关系的问题中,例如时序的先后.事物的依赖等.针对这些问题拓扑排序通常能有效地给出可行解. 为了便于理解,我们先来看一 ...

  8. UVA10305 Ordering Tasks

    题目链接:https://cn.vjudge.net/problem/UVA-10305(忍不住uva连接满) John has n tasks to do. Unfortunately, the t ...

  9. 拓扑排序【Kahn算法(bfs)和dfs求拓扑序列及判环】

    拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,该排序满足这样的条件--对于图中的任意两个结点u和v,若存在一条有 ...

最新文章

  1. 美国国防部将把人工智能用于空战
  2. ipv6host更新
  3. php foreach方法,forEach方法怎么使用
  4. tcp/udp高并发和高吐吞性能测试工具
  5. 线性代数之行列式基础点
  6. mes实施顾问前景如何_国匠智能制造培训|MES的两种实施顾问类型
  7. 解决js array的key不为数字时获取长度的问题
  8. c++工程模式+配置文件+动态调用类
  9. Unity ---WidgetsUI CreateTileView Demo
  10. Ubuntu下安装uwsgi报错的解决方案
  11. nps是什么、怎么计算、有什么用
  12. MSB3644 找不到 .NETFramework,Version=v4.7 的引用程序集。要解决此问题,请为此框架版本安装......
  13. 获取农历节日的公共方法
  14. 【深度学习】步态识别-论文阅读:(T-PAMI-2021)综述:Deep Gait Recognition
  15. 淘宝/天猫,1688,拼多多,京东店铺获取所有商品详情(api接口详情)
  16. ps 选区工具的使用
  17. Linux启用显卡opengl,如何使你的Nvidia显卡支持OpenGL?
  18. 基于vue2+element+springboot+mybatis+jpa+mysql的学籍管理系统
  19. AI模型神预测谁是卡塔尔世界杯冠军
  20. DIY一张“时尚”的多媒体工具光盘

热门文章

  1. python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc
  2. python if语句多个条件-Python中if有多个条件处理方法
  3. python运行慢-提高python运行速度的几个技巧
  4. python编程小游戏-10分钟用Python编写一个贪吃蛇小游戏,简单
  5. spring中事务的设计和实现
  6. LeetCode Longest Repeating Character Replacement(滑动窗口)
  7. 如何理解H264 编码
  8. Hadoop on Mac with IntelliJ IDEA - 3 解决MRUnit - No applicable class implementing Serialization问题...
  9. C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)
  10. Java基础super关键字、final关键字、static关键字、匿名对象整理