6_15 给任务排序(UVa10305)<拓扑排序>

John有n件事情要做,不幸的是这些事情并不是各自独立的,而是有相依性的。换句话说可能有某件事情一定要在另一件事情做完之后才能做。
Input
每组测试数据可能有好几列。第一列有2个整数n,m。(1 <= n <= 100)n代表共有几件事情要做(编号从1到n),m代表事情之间有几个相依关系存在。接下来的m列每列有2个整数i和j。代表i这件事情一定要在j这件事前被执行。
n=m=0时代表输入结束。
Output
对每组测试数据,请输出n个整数,代表事情被执行的顺序。
注:答案可能不是唯一解
Sample Input
5 4
1 2
2 3
1 3
1 5
0 0
Sample Output
1 4 2 5 3

时间: 2024-10-12 14:56:06

6_15 给任务排序(UVa10305)<拓扑排序>的相关文章

UVA10305 拓扑排序

网址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=117863#problem/B 思路分析:裸的拓扑排序,注释在代码中. 代码: #include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>#include <stack>#include <ve

P1347 排序(拓扑排序)

这个题是我照着题解一点点理解一点点打出来的. 拓扑排序: 定义:将有向图中的顶点以线性方式进行排序.即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面. 确定一个图的拓扑排序是基于bfs的,bfs是基于队列的. 首先记录所有的点和所有点的入度(在连边时顺便求得的入度), if(vis[aa]!=1) vis[aa]=1,tot++;//tot记录的是目前能算得上点(因为是随读随做) if(vis[cc]!=1) vis[cc]=1,tot++; son[aa

『拓扑排序』拓扑排序模板

拓扑排序学习前提须知 拓扑排序是对于一个图的所有节点进行排序,要求排序完后没有一个节点指向它前面的节点,那么这样我们就会得到一个拓扑排序后的数组,我们从后往前扫通过某种计算就能够得到从某一个点开始最多能到多少个点. 算法内容 竞赛需要用到的点 1.拓扑排序仅适用于有向无环图,当然也可以判定是否图为无环图 2.能够得到从一个点能到多少个其他的点,如果n在万以上,处理得当甚至能够过千万 拓扑排序略讲 拓扑排序需要满足一个很重要的条件就是,每次进入答案的点的入度一定为0,那么根据这个条件,我们就能得到

Java排序算法——拓扑排序

拓扑排序(Topological Order)UVa10305 Ordering Tasks

2016/5/19 17:39:07 拓扑排序,是对有向无环图(Directed Acylic Graph , DAG )进行的一种操作,这种操作是将DAG中的所有顶点排成一个线性序列,使得图中的任意一对顶点u,v满足如下条件: 若边(u,v)∈E(G),则在最终的线性序列中出现在v的前面 好了,说人话:拓扑排序的应用常常和AOV网相联系,在一个大型的工程中,某些项目不是独立于其他项目的,这意味着这种非独立的项目的完成必须依赖与其它项目的完成而完成,不妨记为u,v,则若边(u,v)∈E(G),代

图的遍历:拓扑排序

[需要解决的问题] 对一个有向无环图(DAG)拓扑排序. 拓扑排序就是,对图上的点进行排序,使得排在后面的点不能通过一条路径到前面的点. 比如下面这个图: 其中一个拓扑排序是1,2,3,4,5:而1,2,5,3,4就不行,因为3能到达5. 因此可以得出: 用一个队列实现,先把入度为0的点放入队列,每次将队首元素加入ans[i-j]中,删除队首元素,并删除该点连接的所有边,于是每次删除一个点都会产生一个新的入度为0的点,再把这个点插入队列,递归即可. 拓扑排序 模板如下: //复杂度:O(N+M)

算法系列笔记6(有关图的算法一—搜索,拓扑排序和强连通分支)

简单概念:对于图G(V,E),通常有两种存储的数据结构,一种是邻接矩阵,此时所需要的存储空间为O(V^2):第二种是邻接表,所需要的存储空间为O(V+E).邻接表表示法存在很强的适应性,但是也有潜在的不足,当要快速的确定图中边(u,v)是否存在,只能在顶点u的邻接表中搜索v,没有更快的方法,此时就可以使用邻接矩阵,但要以占用更多的存储空间作为代价:此外当图不是加权的,采用邻接矩阵存储还有一个优势:在存储邻接矩阵的每个元素时,可以只用一个二进位,而不必用一个字的空间. 图的搜索算法 搜索一个图示有

nyoj349 poj1094 Sorting It All Out(拓扑排序)

nyoj349   http://acm.nyist.net/JudgeOnline/problem.php?pid=349poj1094   http://poj.org/problem?id=1094这两个题是一样的,不过在poj上A了才算真的过,ny上数据有一点弱. 题目大意输入n,m. 一共有n个字母(从A开始), m行语句每个语句“x﹤y”,说明x,y之间的偏序关系.让你判断是否可以通过这些关系得到一个唯一的升序序列,若能则输出这个序列并指出通过前多少条语句得出的,如果n个字母间存在矛

HDU1811 Rank of Tetris 【缩点】+【拓扑排序】

Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5447    Accepted Submission(s): 1526 Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想

POJ--1128--Frame Stacking【拓扑排序】

链接:http://poj.org/problem?id=1128 题意:有几张图片,给你叠加到一起之后的图,问叠加的可能性,如有多种可能则按字典序由小到大输出. 思路:根据给出的图形建一个图,被覆盖的图片向覆盖它的图片建边,然后拓扑排序. 拓扑排序按照字母顺序从小到大找入度为0的点,用dfs形式的拓扑排序,就按照字典序输出了. POJ1270的做法也类似: 代码 #include<cstring> #include<string> #include<fstream>