文章目录

  • 拓扑排序
  • 二、代码

拓扑排序

1)在图中找到所有入度为0的点输出
2)把所有入度为0的点在图中删掉,继续找入度为0的点输出,周而复始
3)图的所有点都被删除后,依次输出的顺序就是拓扑排序

要求:有向图且其中没有环
应用:事件安排、编译顺序

二、代码

 public static List<Node> sortedTopology(Graph graph) {// key 某个节点   value 剩余的入度HashMap<Node, Integer> inMap = new HashMap<>();// 只有剩余入度为0的点,才进入这个队列Queue<Node> zeroInQueue = new LinkedList<>();for (Node node : graph.nodes.values()) {inMap.put(node, node.in);if (node.in == 0) {zeroInQueue.add(node);}}List<Node> result = new ArrayList<>();while (!zeroInQueue.isEmpty()) {Node cur = zeroInQueue.poll();result.add(cur);for (Node next : cur.nexts) {inMap.put(next, inMap.get(next) - 1);if (inMap.get(next) == 0) {zeroInQueue.add(next);}}}return result;}

拓扑排序(依次加入入度为0的节点)相关推荐

  1. 2192. 有向无环图中一个节点的所有祖先(邻接表 加 拓扑排序)

    如果直接使用邻接表不记录已经遍历过的数,暴力搜索超超时,所以需要拓扑排序来记录入度为0的点,入度为0时,他之前的父节点已经记录完毕,可以直接加入到他的子节点中. 最后还需要转换结果,从小到大,直接用s ...

  2. [拓扑排序]旅行计划

    旅 行 计 划 旅行计划 旅行计划 题目描述 小明要去一个国家旅游.这个国家有# N N N个城市,编号为 1 1 1至 N N N,并且有 M M M条道路连接着,小明准备从其中一个城市出发,并只往 ...

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

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

  4. 基于入度的拓扑排序(Kahn's Algorithm)

    本文中的图用邻接链表来表示 拓扑排序只针对于有向无环图(DAG)才能完成,所以可以利用拓扑排序来判断一个有向图是否有环. 某一点的入度:图中指向该顶点的边的个数 图1 :DAG 以上图简单说明,点0的 ...

  5. 洛谷 P3244 / loj 2115 [HNOI2015] 落忆枫音 题解【拓扑排序】【组合】【逆元】

    组合计数的一道好题.什么非主流题目 题目背景 (背景冗长请到题目页面查看) 题目描述 不妨假设枫叶上有 \(n​\) 个穴位,穴位的编号为 \(1\sim n​\).有若干条有向的脉络连接着这些穴位. ...

  6. 【数据结构与算法】【算法思想】拓扑排序

    一.拓扑排序 拓扑排序是基于依赖关系的节点,根据依赖关系而生成的序列.节点和依赖关系往往要生成有向无环图.类似的问题有:穿衣服裤子的先后关系,生成穿衣序列/专业课程与前置课程形成的课程学习序列/代码编 ...

  7. 深度优先,广度优先,拓扑排序(实战题解)

    前言 深度遍历和广度遍历在算法占比很大,主要是解决图的问题(树也是图的一种) 一.深度优先遍历 1.深度遍历(DFS)解决什么问题 DFS解决的是连通性的问题,即给定两⼀个起始点(或某种起始状态)和⼀ ...

  8. 如何生成有向图_八十六、从拓扑排序探究有向图

    「@Author:Runsen」 关于排序,其实还有很多,比如常见的希尔排序,桶排序,计数排序和基数排序,由于要过渡到数据结构有向图,因此需要了解拓扑排序和邻接矩阵概念. 拓扑排序 拓扑排序本身并不是 ...

  9. hihoCoder 1175 拓扑排序

    hihoCoder 1175 拓扑排序 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小 ...

最新文章

  1. Timus 1837. Isenbaev's Number
  2. Anaconda 下libsvm的安装
  3. Entity Framework Core 执行SQL语句和存储过程
  4. 线程通信的经典问题:生产者消费者问题
  5. 面试:一文搞懂Java集合
  6. 连接上局域网打开计算机卡,win7怎么玩局域网游戏,win7怎么玩局域网游戏卡
  7. ping一下网站服务器的域名,怎么PING一个网站的域名
  8. 负数求余究竟怎么求???
  9. 新手学习C语言,入门小游戏的编写(三子棋)
  10. java实现两个时间的累加_java List 相邻两个数据累加,可以用stream的collectors.reducing实现么...
  11. 北理工计算机系裴教授,裴 炤
  12. 【python】BeautifulSoup的应用
  13. python学习——酷炫时钟
  14. 第四方聚合支付系统源码PHP版
  15. 【Python】Python3如何将汉字转化成反斜线u(\u)开头的字符串
  16. java脏字过滤_分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤...
  17. 盈利模式方案范本_模式方案
  18. Python product函数介绍
  19. 黑马畅购商城---1.项目介绍-环境搭建
  20. iOS tableView滑动隐藏/显示tabbar

热门文章

  1. 【融职培训】Web前端学习 第2章 网页重构11 HTML5新增标签
  2. 测你现在活了多少天,计算从出生到现在的天数,运用Calendar类
  3. win7 系统增加自定义分辨率_【文献转载】GT5000便携式多参数土壤呼吸测量系统用于棉花田间土壤二氧化碳释放量的测量...
  4. 50%的转正率——瑞晟
  5. python求字典的平均值_python求字典的平均值_获取字典列表中值的平均值
  6. 树莓派CM4查看系统版本命令
  7. deepnode软件下载地址_deepnode安卓下载- deepnode透视衣服相机软件安装下载
  8. Java七大设计原则详解与运用
  9. 回溯法和分支限界法解决旅行商问题
  10. CCF-CSP-202012-5 星际旅行 80分暴力题解