题目:https://vjudge.net/problem/UVA-10305

基础知识:


拓扑排序:把一个图中的所有结点排序,对于每一条有向边(u,v),使u都在v的前面

如图中存在有向环,则不存在拓扑排序,反之存在。

不包含有向环的有向图称为有向无环图DAG(Directed Acyclic Graph)

解题思路:


本题是一道拓扑排序模版题,注意,在用dfs完成拓扑排序时,在访问完一个结点后要把它加到当前拓扑排序数组的尾部

c[u]=0;表示从未访问过(未调用dfs(u))

c[u]=1;表示已经访问过,并且递归访问过它的所有子孙(dfs(u)已返回结果)

c[u]=-1;表示正在访问,(dfs(u)正在栈帧中,但未返回)

ac代码:


#include <iostream>
#include <cmath>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
#define maxn 110
#define inf 1e+9+10
using namespace std;
typedef long long ll;
int n,m,t,c[maxn],topo[maxn],G[maxn][maxn];
bool dfs(int u)
{c[u]=-1;//正在访问for(int v=1;v<=n;v++)if(G[u][v]){if(c[v]<0)//存在有向环return false;else if(!c[v]&&!dfs(v)) return false;//v未访问且以其继续bfs会false}c[u]=1;//已访问完毕topo[--t]=u;return true;
}
bool toposort()
{t=n;memset(c,0,sizeof(c));for(int u=1;u<=n;u++)if(!c[u])//未访问过if(!dfs(u)) return false;//拓扑排序失败return true;
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);//ios::sync_with_stdio(false);int a,b,i;while(scanf("%d %d",&n,&m)==2){if(m==0&&n==0) break;memset(G,0, sizeof(G));for(i=0;i<m;i++){scanf("%d %d",&a,&b);G[a][b]=1;}toposort();for(i=0;i<n;i++){if(i)printf(" ");printf("%d",topo[i]);}printf("\n");}return 0;
}

【UVA10305】Ordering Tasks(拓扑排序)相关推荐

  1. UVA10305 Ordering Tasks

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

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

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

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

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

  4. UVA 10305 Ordering Tasks (拓扑排序)

    题意:给你n个点.m个关系,每个关系两个点u.v,表示u小于v,叫你输出任意一个序列保证满足所有给定的关系 例如:n=3 m=2 1 2 3 1 3 2 3 1 2 题解:拓扑排序排的是一个有向无环图 ...

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

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

  6. Uva 10305 - Ordering Tasks

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

  7. 算法:图(Graph)的遍历、最小生成树和拓扑排序

    背景 不同的数据结构有不同的用途,像:数组.链表.队列.栈多数是用来做为基本的工具使用,二叉树多用来作为已排序元素列表的存储,B 树用在存储中,本文介绍的 Graph 多数是为了解决现实问题(说到底, ...

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

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

  9. 【POJ - 2762】Going from u to v or from v to u?(Tarjan缩点,树形dp 或 拓扑排序,欧拉图相关)

    题干: In order to make their sons brave, Jiajia and Wind take them to a big cave. The cave has n rooms ...

  10. 数据结构之图:有向图的拓扑排序,Python代码实现——26

    有向图的拓扑排序 拓扑排序介绍 什么是拓扑排序? 一个有向图的拓扑排序(Topological sort 或 Topological ordering)是根据其有向边从顶点U到顶点V对其所有顶点的一个 ...

最新文章

  1. 在Elasticsearch中对 text 类型的字段进行聚合异常Fielddata is disabled,Set fielddata=true
  2. html前端 echarts图表使用详解
  3. os与sys类使用小节
  4. oc基础-foundation框架中的常用结构体
  5. 解决问题:心态 原则 方法
  6. Java知识积累-基础篇
  7. (79)FPGA版本如何管理?
  8. FCC算法题--Validate US Telephone Numbers
  9. JS五彩连珠小游戏(Canvas绘制)
  10. CRMEB多商户1.7.1版本功能更新预告 预计12月更新
  11. 免费动态域名解析软件dnspod每步nat123体会
  12. FPGA零基础学习:VGA协议驱动设计
  13. 【单调队列】51nod 1275 连续子段的差异
  14. 关于G0、G1、G2、G3的名词解释
  15. SpringSecurity安全框架简介
  16. html根据PC手机设置不同背景图,Html-根据不同的分辨率设置不同的背景图片
  17. vue 项目下JS内存溢出
  18. 谷歌浏览器控制台如何切换中英文
  19. 基于Linux+6818开发板实现普通电子相册翻页功能
  20. UI 设计小白入门论

热门文章

  1. 求整数数组的最小值c语言,编程实现求一个整数数组num[]中的最大值与最小值并输出结果的程序...
  2. python 消息中间件_如何评价腾讯开源的消息中间件TubeMQ?
  3. mysql数据库封装类_基于mysqli封装的数据库类
  4. php两个数组删除相同数据,php – 如何从两个数组中删除重复对?
  5. 图数据库_多款业界流行图数据库对比
  6. solidworks入门实例画图_分享用SolidWorks绘制的鸡蛋托盘,学会借助于曲面生成波浪线草图...
  7. android studio 包重复
  8. 3种时间复杂度实现不同类型的无序数组去重
  9. java 编程思想 一 第二章(对象)
  10. 挨踢部落故事汇(2):机缘所致转型之路