一、有向无环图

  • 有方向
  • 没有闭环

二、拓扑排序

拓扑排序是将有向无环图的顶点排成一个线性序列的过程。

比如可将上图

三、拓扑排序步骤

1. 首先要任意选择一个没有前驱的顶点,即入度为0的点,然后将它输出。

在下面这张图中我们选择1为出发点。

2. 删除该节点以及与它相关联的所有边,这个点的nexts里面的点入度就减少1

选择1为出发点之后,我们将它输出,并删除该节点以及与它相关联的所有边。

3. 然后在删除后的图中继续找一个没有前驱的节点,

这里没有前驱的节点只有2和3.

这里我们选择3,那么将节点3输出后的图 如下图所示。

4. 继续找入度为0的点重复上述步骤。

接下来没有前驱的节点只有2和6了。

我们这里选择节点6,同样的输出节点6后删除。

然后继续找没有前驱的节点。这时候没有前驱的节点只剩下节点2.

接下来的点继续进行拓扑排序,

5. 得到的拓扑排序的一种如下图所示。

相信大家也都发现其实拓扑排序是不唯一的,我们选择的出发点不同,结果就是不一样的。

这里给出大家针对上图几种拓扑排序序列。

四、算法设计

用一个map保存他的所有节点对应的入度。

用一个队列保存每次入度为0的节点然后pop,pop的顺序就是拓扑排序的顺序。

list <node*> tsort(graph G) {list<node*> res;unordered_map<node*, int> inmap; queue<node*> zeronode;for (auto next : G.nodes) {//G.nodes是mapinmap[next.second] = next.second->in;if (next.second->in == 0) {zeronode.push(next.second);}}while (!zeronode.empty()) {node* cur = zeronode.front();zeronode.pop();res.push_back(cur);for (auto next : cur->nexts) {inmap[next]--;if (inmap[next] == 0) {zeronode.push(next);}}}return res;}

https://jingyan.baidu.com/article/1e5468f9c2c830094861b769.html

https://zhuanlan.zhihu.com/p/127190494

图论 有向无环图 拓扑排序 是什么相关推荐

  1. 有向无环图拓扑排序(python实现)

    问题:有向无环图的拓扑排序 题目描述 由某个集合上的一个偏序得到该集合上的一个全序,这个操作被称为拓扑排序.偏序和全序的定义分别如下: 若集合X上的关系R是自反的.反对称的和传递的,则称R是集合X上的 ...

  2. 有向无环图—拓扑序列

    拓扑序列是对有向无环图的节点编号的排序使得满足任意一条边的起点都在终点的前面,例如: 1->2, 3->2 的有向无环图的一个拓扑序列为1,3,2. 任何一个有向无环图都至少有一个拓扑序列 ...

  3. java 有向无环图 树_拓扑排序-有向无环图(DAG, Directed Acyclic Graph)

    条件: 1.每个顶点出现且只出现一次. 2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面. 有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说. 一 ...

  4. 有向无环图—关键路径详解(最通俗易懂的版本)【数据结构】

    文章目录 有向无环图 拓扑排序 AOV-网 AOE-网 关键路径的概念 事件的最早/晚开始时间 事件和活动的区分 活动的最早/晚开始时间 有向无环图 拓扑排序 AOV-网 由于有向无环图可以用一种自然 ...

  5. 笔记:深度学习与有向无环图SVM结合用于年龄估计的局部调整

    阅读论文:Combined Deep Learning With Directed Acyclic Graph SVM for Local Adjustment of Age Estimation | ...

  6. 【图论】有向无环图的拓扑排序

    1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...

  7. 有向无环图DAG 拓扑排序 代码解释

    目录: DAG定义 举例描述 实际运用 算法描述 算法实战 算法可视化 定义 在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological ...

  8. 打印一种拓扑排序(假定给的是有向无环图时)DFS+栈

    一.定义: 在计算机科学领域,有向图的拓扑排序是其顶点的线性排序,使得对于从顶点u 到顶点v的每个有向边uv,u在排序中都在v之前. 例如,图形的顶点可以表示要执行的任务,并且边可以表示一个任务必须在 ...

  9. 数据结构(六):图的概念、存储方式、基本操作、最小生成树、最短路径、有向无环图、关键路径 | Prim、Kruskal算法 | BFS、Dijkstra、Floyd算法 | 拓扑排序 | 求关键路径

    文章目录 第六章 图 一.图 (一)图的定义 (二)图逻辑结构的应用 (三)无向图.有向图 (四)简单图.多重图 (五)顶点的度.入度.出度 (六)顶点-顶点的关系描述 (七)连通图.强连通图 (八) ...

  10. 数据结构-考研难点代码突破 (C++实现有向无环图的拓扑排序)

    文章目录 1. AOV网 2. 拓扑排序 C++代码 1. AOV网 AOV网∶若用DAG 图(有向无环图)表示一个工程,其顶点表示活动,用有向边<Vi,Vj>表示活动 Vi必须先于活动V ...

最新文章

  1. 封装了一套WeCenter的IOS SDK
  2. 背包问题概述(Lintcode- 562.Backpack IV问题解决)
  3. java StringBuffer常用方法
  4. php输出分组,ThinkPHP 项目分组中的模板输出
  5. 每日一题:leetcode190.颠倒二进制位
  6. 用体元滤波器进行降低采样
  7. 软件工程课程周学习进度报告——第六周
  8. 经营生鲜便利店的超级产品战略,盘点那些靠卖菜抢占社区的便利店
  9. vs2018网站浏览时显示: HTTP 403.4 - 禁止访问: 需要使用 SSL 查看该资源”错误,但是网站没有配置为使用 SSL
  10. 手撕力扣之贪心法:买卖股票的最佳时机 II、最大子序和、跳跃游戏、跳跃游戏 II、分发饼干、划分字母区间、重构字符串、分发糖果、种花问题、加油站
  11. 厕所地图,玩出新花样!
  12. android手机微信输入蓝色字体,微信彩色昵称怎么制作?微信个性蓝色昵称设置图文教程与方法...
  13. python注释可用于表明作者和版权信息_Python-注释帮助我们理解-No9
  14. InstallShield自定义对话框浅谈(转)
  15. Java加密技术(一)—— HMACSHA1 加密算法
  16. 什么是一网统管?终于有人讲明白了
  17. Node安装及更换源
  18. springboot crm客户关系管理系统【源码好又多】
  19. 通过通达信l2行情接口的逐笔委托中挖掘主力踪迹
  20. Android隐私政策

热门文章

  1. 一些面试题目(网易游戏2011.10.15校园招聘会笔试题)
  2. Query ajax操作!!
  3. 【ZT】可行性研究报告编写规范
  4. win 7-8-10 下 删除我的电脑下多余的设备和驱动器,腾讯视频,酷我音乐,手机
  5. python入门第二十五天--反射 通过字符串的形式操作对象中的成员
  6. Codeforces 1009E Intercity Travelling 【期望】【概率】
  7. access窗体主体居中
  8. java基础 题和知识点总结, 关于String s是否默认初始化为null......,new一个对象和类静态域,是不是在内存中不是一个地方...
  9. 从XmlDocument到XDocument的转换
  10. (Oracle、SqlServer、Access)数据库开发代码生成工具SharpCode2.0