条件:

1.每个顶点出现且只出现一次。

2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。

有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。

一般用有向边指示顺序关系,运用于顺序关系。

例如,下面这个图:

显然是一个DAG图,1→4表示4的入度+1,4是1的邻接点,

代码表示:前者deg[4]++;后者用vector[1].push(4)

如何写出拓扑排序代码?

1.首先将边与边的关系确定,建立好入度表和邻接表。

2.从入度为0的点开始删除,如上图显然是1的入度为0,先删除。

3.于是,得到拓扑排序后的结果是 { 1, 2, 4, 3, 5 }。通常,一个有向无环图可以有一个或多个拓扑排序序列。因为同一入度级别的点可以有不同的排序方式。

4.拓扑排序可以判断图中有无环,如下图

显然4,5,6入度都是1,不存在入度为0的点,无法进行删除操作。判断有无环的方法,对入度数组遍历,如果有的点入度不为0,则表明有环。

例题+代码

拓扑排序(一)-Hiho-Coder1174

描述

由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来。

小Ho:小Hi,你这学期有选什么课么?

小Hi:挺多的,比如XXX1,XXX2还有XXX3。本来想选YYY2的,但是好像没有先选过YYY1,不能选YYY2。

小Ho:先修课程真是个麻烦的东西呢。

小Hi:没错呢。好多课程都有先修课程,每次选课之前都得先查查有没有先修。教务公布的先修课程记录都是好多年前的,不但有重复的信息,好像很多都不正确了。

小Ho:课程太多了,教务也没法整理吧。他们也没法一个一个确认有没有写错。

小Hi:这不正是轮到小Ho你出马的时候了么!

小Ho:哎??

我们都知道大学的课程是可以自己选择的,每一个学期可以自由选择打算学习的课程。唯一限制我们选课是一些课程之间的顺序关系:有的难度很大的课程可能会有一些前置课程的要求。比如课程A是课程B的前置课程,则要求先学习完A课程,才可以选择B课程。大学的教务收集了所有课程的顺序关系,但由于系统故障,可能有一些信息出现了错误。现在小Ho把信息都告诉你,请你帮小Ho判断一下这些信息是否有误。错误的信息主要是指出现了"课程A是课程B的前置课程,同时课程B也是课程A的前置课程"这样的情况。当然"课程A是课程B的前置课程,课程B是课程C的前置课程,课程C是课程A的前置课程"这类也是错误的。

输入

第1行:1个整数T,表示数据的组数T(1 <= T <= 5)

接下来T组数据按照以下格式:

第1行:2个整数,N,M。N表示课程总数量,课程编号为1..N。M表示顺序关系的数量。1 <= N <= 100,000. 1 <= M <= 500,000

第2..M+1行:每行2个整数,A,B。表示课程A是课程B的前置课程。

输出

第1..T行:每行1个字符串,若该组信息无误,输出"Correct",若该组信息有误,输出"Wrong"。

Sample Input

2

2 2

1 2

2 1

3 2

1 2

1 3

Sample Output

Wrong

Correct

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const int maxa=;

vectorvec[maxa];

queueq;

int rudu[maxa];

int t,n,m,x,y,now;

bool tuopu(){

int cnt=;

while(!q.empty()) q.pop();

for(int i=;i<=n;i++)

if(rudu[i]==) q.push(i);

while(!q.empty()){

now=q.front();

cnt++;

q.pop();

for(size_t i=;i

if(--rudu[vec[now][i]]==)

q.push(vec[now][i]);

}

if(cnt==n) return true;

else return false;

}

int main(){

cin>>t;

while(t--)

{

cin>>n>>m;

memset(rudu,,sizeof(rudu));

for(int i=;i<=n;i++) vec[i].clear();

while(m--)

{

cin>>x>>y;

vec[x].push_back(y);

rudu[y]++;//入度+1

}

if(tuopu()) cout<

else cout<

}

return ;

}

C&num;实现有向无环图&lpar;DAG&rpar;拓扑排序

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...

判断有向无环图&lpar;DAG&rpar;

1.拓扑排序 bfs 所有入度为0的先入选. 2.tarjan 1个点1个集合 3.暴力 一个点不能重新到达自己

【模板整合计划】图论—有向无环图 &lpar;DAG&rpar; 与树

[模板整合计划]图论-有向无环图 (DAG) 与树 一:[拓扑排序] 最大食物链计数 \(\text{[P4017]}\) #include #include

【拓扑】【宽搜】CSU 1084 有向无环图 &lpar;2016湖南省第十二届大学生计算机程序设计竞赛&rpar;

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105 ...

javascript实现有向无环图中任意两点最短路径的dijistra算法

有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...

有向无环图的应用—AOV网 和 拓扑排序

有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

图-&gt&semi;有向无环图-&gt&semi;拓扑排序

文字描述 关于有向无环图的基础定义: 一个无环的有向图称为有向无环图,简称DAG图(directed acycline graph).DAG图是一类较有向树更一般的特殊有向图. 举个例子说明有向无环图 ...

CSU 1804&colon; 有向无环图 拓扑排序 图论

1804: 有向无环图 Submit Page   Summary   Time Limit: 5 Sec     Memory Limit: 128 Mb     Submitted: 716    ...

第十二届湖南省赛 (B - 有向无环图 )(拓扑排序&plus;思维)好题

Bobo 有一个 n 个点,m 条边的有向无环图(即对于任意点 v,不存在从点 v 开始.点 v 结束的路径). 为了方便,点用 1,2,…,n 编号. 设 count(x,y) 表示点 x 到点 y ...

随机推荐

Jsp 错题分析

ArrayList删除元素通过RemoveAt(int index)来删除指定索引值的元素 运行时异常都是RuntimeException类及其子类异常,如NullPointerException.I ...

python框架&lpar;flask&sol;django&sol;tornado&rpar;比较

一.对外数据接口 三者作为web框架,都是通过url映射对外的接口 flask:以decorator的形式,映射到函数中 django:以字典形式,映射到函数 tornado: 以字典形式,映射到类中 ...

WPF 基础到企业应用系列索引

转自:http://www.cnblogs.com/zenghongliang/archive/2010/07/09/1774141.html WPF 基础到企业应用系列索引 WPF 基础到企业应用系 ...

&lpar;medium&rpar;LeetCode 207&period;Course Schedule

There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...

配置Nginx服务

一,安装之前准备1.nginx依赖: gcc openssl-devel pcre-devel zlib-devel    安装依赖:yum install gcc openssl-devel pcr ...

javascript语言学习笔记。

js类创建方法 var DogKing = function(dogName){ this.dogName = dogName; }; var myDogKing = new DogKing(&quo ...

bzoj 2212&colon; &lbrack;Poi2011&rsqb;Tree Rotations

Description Byteasar the gardener is growing a rare tree called Rotatus Informatikus. It has some in ...

《深入理解Java虚拟机》-----第8章 虚拟机字节码执行引擎——Java高级开发必须懂的

概述 执行引擎是Java虚拟机最核心的组成部分之一.“虚拟机”是一个相对于“物理机”的概念 ,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而 ...

APICloud Studio2新建应用报错和检出错误

今天心血来潮,闲暇时间想做个移动应用app,听一哥们说APICloud开发app很方便,就查询了一下,看了之后简直就是热血沸腾,我感觉正是我一直要找的工具 信心满满的开始着手使用,看了一下介绍我选择了 ...

java 有向无环图 树_拓扑排序-有向无环图(DAG, Directed Acyclic Graph)相关推荐

  1. 图——深度优先遍历(DFS)实现有向无环图的逆拓扑排序

    对图的深度遍历与对树的深度遍历思想类似,采用的是递归函数的办法. 如果是非连通图,则DFS遍历所有顶点即可. //Graph 图 //vertex 顶点,用一个int型变量表示//返回有向图G中顶点v ...

  2. 有向无环图Directed Acyclic Graph(DAG)

    1.DAG 有向无环图Directed Acyclic Graph(DAG) DAG是一个没有 有向循环的.有限的有向图 . 它由有限个顶点和有向边组成,每条有向边都从一个顶点指向另一个顶点: 从任意 ...

  3. 有向无环图的所有拓扑排序

    有向无环图的所有拓扑排序 对有向无环图DAG的拓扑排序是顶点的线性排序,从而使每一有向边[u,v][u,v][u,v],顶点u进来的顺序v在.如果图不是 DAG,则无法对图进行拓扑排序. 给定一个 D ...

  4. 有向无环图的应用——拓扑排序

    目录 一.什么是AOV网? 二.什么是拓扑排序? 2.1 拓扑排序的定义 2.2 拓扑排序的基本思想 三.拓扑排序算法的实现 3.1 算法思想 3.1.1 设置辅助数组indegree[ ] 3.1. ...

  5. 【恋上数据结构与算法 第二季】【04】图-基础实现_遍历_拓扑排序

    持续学习&持续更新中- 学习态度:脚踏实地 [恋上数据结构与算法 第二季][04]图-基础实现_遍历_拓扑排序 图的实现方案 邻接矩阵 邻接表 图的基础接口 顶点.边的定义 图的基础实现 图的 ...

  6. 图的应用 | 拓扑排序

    拓扑序不唯一 一个图存在拓扑序  等价于 该图为有向无环图 1.有向图的拓扑排序实现: 辅助数据结构: 记录入度的数组 indegree[]: 初始化:创建的时候同步初始化: 队列zero:记录当前入 ...

  7. 图综合练习--拓扑排序_03 数据结构与算法 - 排序

    1. 冒泡排序 Bubble Sort 基本思想 给定一个数组,这些元素将通过相互之间的比较,按照大小顺序一个个地像气泡一样浮出水面 实现 每一轮,从头部开始,每两个元素比较大小进行交换,直到这一轮中 ...

  8. 图论--拓扑排序--判断一个图能否被拓扑排序

    拓扑排序的实现条件,以及结合应用场景,我们都能得到拓扑排序适用于DAG图(Directed Acyclic Graph简称DAG)有向无环图, 根据关系我们能得到一个线性序列,实现的方式是DFS,具体 ...

  9. Mr. Kitayuta‘s Technology CodeForces - 505D(并查集+拓扑排序或dfs找环) 题解

    题目  Shuseki Kingdom is the world's leading nation for innovation and technology. There are n cities ...

最新文章

  1. java严格区分大小写吗_Java是否区分大小写?
  2. v-for 切换不同的class
  3. python 判断节假日_[宜配屋]听图阁
  4. Makefile的obj-y 和 obj-m
  5. Genymotion设置代理至BurpSuite和Charles
  6. Java学习笔记_选择语句
  7. P1758-[NOI2009]管道取珠【dp】
  8. 【李宏毅机器学习】Classification_1 分类(p10) 学习笔记
  9. vue assets图片_Vue实战—如何细化Vue项目目录设计(2)
  10. C/C++变量在内存中的位置及初始化问题
  11. mysql day of week_在MySQL中按day_of_week排序
  12. NMEA-0183 协议简介
  13. 萝卜内存对比工具使用说明
  14. 化繁为简,弱监督目标定位领域的新SOTA - 伪监督目标定位方法(PSOL) | CVPR 2020
  15. Ring Buffer介绍
  16. 【设计模式】-状态模式->APP抽奖活动(源码与类图解析)
  17. html5页面弹窗,H5页面怎么设置弹窗
  18. C++上机实验二第2题
  19. Java核心技术:Java数据类型以及控制语句
  20. ATH10传感器读取温湿度

热门文章

  1. vue中使用bootstrapvue
  2. P 3802 小魔女帕琪(期望)
  3. 不用找,你想要的促销海报设计模板素材都在这里
  4. SHOP++支持的第三方支付方式
  5. JAVA-WEB应用程序 配置部署
  6. AE+ArcGIS二次开发课程设计(基于C#)
  7. 华硕ASUS F81 se win7 声卡(RealTek HDAudio) 杂音 解决办法
  8. 水果店圈子:想开一个水果店该如何考察,开个水果店都需要准备什么
  9. 二手车交易价格预测-01
  10. 【u盘格式化不了怎么办?】