UVA 10305 Ordering Tasks (拓扑排序)
题意:给你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 (拓扑排序)相关推荐
- Uva 10305 - Ordering Tasks
Problem F: Ordering Tasks Input: standard input; Output: standard output Time Limit: 1 second; Memo ...
- UVa 1572 Self-Assembly (拓扑排序)
题目链接: https://cn.vjudge.net/problem/UVA-1572 Automatic Chemical Manufacturing is experimenting with ...
- Ordering Tasks UVA - 10305(拓扑排序)
在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点. 先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一. 一直做改操作,直到所有的节点都被 ...
- 【刘汝佳可运行代码】Ordering Tasks UVA - 10305【两种解法】
立志用最少的代码做最高效的表达 John has n tasks to do. Unfortunately, the tasks are not independent and the executi ...
- Uva 10305 给任务排序
题目链接:https://uva.onlinejudge.org/external/103/10305.pdf 紫书P167 拓扑排序. dfs--从一个点出发,dfs 与之相连的所有点,把本身放入到 ...
- 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)
[Solution] 接上一篇,在处理有向无环图的最长链问题的时候,可以在做拓扑排序的同时,一边做DP; 设f[i]表示第i个方块作为最上面的最高值; f[y]=max(f[y],f[x]+h[y]) ...
- python 拓扑排序_拓扑排序(topsort)算法详解
在图论中,由某个集合上的偏序得到全序的策略就是拓补排序算法.拓扑排序常出现在涉及偏序关系的问题中,例如时序的先后.事物的依赖等.针对这些问题拓扑排序通常能有效地给出可行解. 为了便于理解,我们先来看一 ...
- UVA10305 Ordering Tasks
题目链接:https://cn.vjudge.net/problem/UVA-10305(忍不住uva连接满) John has n tasks to do. Unfortunately, the t ...
- 拓扑排序【Kahn算法(bfs)和dfs求拓扑序列及判环】
拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,该排序满足这样的条件--对于图中的任意两个结点u和v,若存在一条有 ...
最新文章
- 美国国防部将把人工智能用于空战
- ipv6host更新
- php foreach方法,forEach方法怎么使用
- tcp/udp高并发和高吐吞性能测试工具
- 线性代数之行列式基础点
- mes实施顾问前景如何_国匠智能制造培训|MES的两种实施顾问类型
- 解决js array的key不为数字时获取长度的问题
- c++工程模式+配置文件+动态调用类
- Unity ---WidgetsUI CreateTileView Demo
- Ubuntu下安装uwsgi报错的解决方案
- nps是什么、怎么计算、有什么用
- MSB3644 找不到 .NETFramework,Version=v4.7 的引用程序集。要解决此问题,请为此框架版本安装......
- 获取农历节日的公共方法
- 【深度学习】步态识别-论文阅读:(T-PAMI-2021)综述:Deep Gait Recognition
- 淘宝/天猫,1688,拼多多,京东店铺获取所有商品详情(api接口详情)
- ps 选区工具的使用
- Linux启用显卡opengl,如何使你的Nvidia显卡支持OpenGL?
- 基于vue2+element+springboot+mybatis+jpa+mysql的学籍管理系统
- AI模型神预测谁是卡塔尔世界杯冠军
- DIY一张“时尚”的多媒体工具光盘
热门文章
- python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc
- python if语句多个条件-Python中if有多个条件处理方法
- python运行慢-提高python运行速度的几个技巧
- python编程小游戏-10分钟用Python编写一个贪吃蛇小游戏,简单
- spring中事务的设计和实现
- LeetCode Longest Repeating Character Replacement(滑动窗口)
- 如何理解H264 编码
- Hadoop on Mac with IntelliJ IDEA - 3 解决MRUnit - No applicable class implementing Serialization问题...
- C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)
- Java基础super关键字、final关键字、static关键字、匿名对象整理