图的拓扑排序(动图)
文章目录
- 概述
- 度的定义
- 排序
- 描述
- 示例
- 示例动图
- 伪代码
- 另一个实现思路
概述
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
度的定义
- 入度,顶点的入边条数
- 出度,顶点的出边条数
排序
描述
- 创建一个队列,保存拓扑排序的顺序
- 遍历整张图,计算出每一个顶点的入度,并找到入度为0的顶点,将该点加入队列
- 取出队列头部的顶点,所有指向该顶点的入度都减1,减1后入度为0的顶点加入队列,重复本步操作,直到队列中再没有元素
示例
图中并没有画出队列,排序结果展示的是出队列的顺序
遍历完图后,各个顶点的入度,如图所示,再将入度为0的顶点加入队列(顶点0)
取出队列头部的顶点(顶点0),所有指向该顶点的入度都减1,再将入度为0的顶点加入队列(顶点1)
取出队列头部的顶点(顶点1),所有指向该顶点的入度都减1,再将入度为0的顶点加入队列(顶点2,4)
取出队列头部的顶点(顶点2),由于此时顶点2没有指向顶点了,所以没有顶点入队列
取出队列头部的顶点(顶点4),所有指向该顶点的入度都减1,再将入度为0的顶点加入队列(顶点3)
取出队列头部的顶点(顶点3),由于此时顶点3没有指向顶点了,所以没有顶点入队列,并且此时队列中没有元素了,则排序完成
示例动图
伪代码
// queue为保存顶点的队列
while(!queue.isEmpty()){int cur = queue.remove();res.add(cur);// array[cur]表示和cur指向的顶点,表示顶点上午入度for(int next: array[cur]){indegrees[next] --;if(indegrees[next] == 0) queue.add(next);}
}
另一个实现思路
深度优先-后序遍历的逆序就是拓扑排序的结果
图的拓扑排序(动图)相关推荐
- 【图论】有向无环图的拓扑排序
1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...
- aov建立Java模拟,数据结构之---C语言实现拓扑排序AOV图
//有向图的拓扑排序 //杨鑫 #include #include #include #define MAX_NAME 3 #define MAX_VERTEX_NUM 20 typedef int ...
- 有向无环图的拓扑排序
拓扑排序 对于一个有向无环图,我们可以这样确定一个图中顶点的顺序: 对于所有的u.v,若存在有向路径u-->v,则在最后的顶点排序中u就位于v之前.这样确定的顺序就是一个图的拓扑排序. ...
- 有向无环图DAG 拓扑排序 代码解释
目录: DAG定义 举例描述 实际运用 算法描述 算法实战 算法可视化 定义 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological ...
- 数据结构与算法之-----图(拓扑排序)
[ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据 ...
- 第5-2课:图的拓扑排序
拓扑排序常用来确定一个依赖关系集中.事物发生的顺序.一个典型的应用场景就是在项目管理或工程实施中安排各种生产活动的计划,在考虑各种活动的依赖关系的基础上,安排各种活动的开始时间,使得项目或工程能够以高 ...
- BUCT数据结构——图(拓扑排序、关键路径)
文章目录 问题 A: 邻接矩阵存储的图,节点的出度和入度计算(附加代码模式) 问题 B: 算法7-12:有向无环图的拓扑排序 问题 C: 有向图是否存在环? 问题 D: 图-节点的最早发生时间 问题 ...
- 图的拓扑排序(AOV网络)
文章目录 拓扑排序 概念 实现 邻接表(队列) 邻接矩阵(栈) 总结 源代码 邻接表 邻接矩阵 拓扑排序 概念 拓扑排序是对有向无环图的顶点的一种排序. AOV网络 : 在有向图中, 用顶点表示活动或 ...
- P6560 [SBCOI2020] 时光的流逝 (博弈,反向建图,拓扑排序
洛谷P6560 [SBCOI2020] 时光的流逝 题意: 给定一个有向图(可能有环),给定起点和终点,两个人玩游戏,一人走一步,先到达终点的人赢或者先无法移动的人输 思路: 题解 因为是终点和叶子节 ...
最新文章
- Python编程基础:第二十七节 format输出Format
- 使用SAX解析XML文件
- 基于结构化数据的文本生成:非严格对齐生成任务及动态轻量的GCN生成模型
- 【Go API 开发实战】Go API 开发实战教程简介(1-7)
- 合并两个排序的链表递归和非递归C++实现
- 聚合搜索V2.0泛目录站群二开源码 可做指定关键词
- glide首次加载图片时,出现图片变形,重复一下就正常
- ae saber插件_2020全套AE基础入门(下),入门首选!
- Spring Data JPA手动管理事务
- 图解刘谦如何手穿玻璃桌(详细图文说明)
- unity可以直接转h5吗_Unity对H5小游戏开发的支持—Project Tiny
- VBA和Python双语对照,Excel编程学习更简单
- 素雅的登录界面,简单而优雅
- 掩膜裁剪tif步骤_栅格数据批量掩膜(裁剪)
- 我,32岁,小米公司程序员,揭 开北京“码农”的真实收入
- 机器学习入门(吴恩达)——单变量线性回归
- 数据库连登录失败。该登录名来自不受信任的域,不能与 Windows 身份验证一起使用。
- 魅族手机刷linux系统版本,魅族mx4刷ubuntu教程(转自微博:校长ubuntu博文)
- 关于xib中添加collection view 控件引起brash
- Sphinx的一个应用实例
热门文章
- with open() as f的用法
- 交换机备份电路的解决方案
- 怎么将IDEA从中文调回英文
- 一个佛系程序员的年终总结!元旦快乐哟~
- 使用JS实现无刷新读取json接口数据
- 建筑能源管理系统(EMS)
- app启动优化策略,BAT这种大厂履历意味着什么?满满干货指导
- random.randint函数用法
- 2022-12-05:部门工资前三高的所有员工。编写一个SQL查询找出每个部门中收入前三高的员工 。 +------------+----------+--------+ | Department |
- CSS相对定位和绝对定位详解