博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法7-10:拓扑排序
阅读量:4972 次
发布时间:2019-06-12

本文共 1105 字,大约阅读时间需要 3 分钟。

在一个软件project项目中,有些任务须要在另外一个任务完毕之后才干完毕,这样的任务在软件project中是很常见的。下图就展示了一个软件项目的依赖情况。

这张图很明显,就是一张有向图。那么,如今问题就来了,怎样输出任务的完毕顺序呢?

这个问题有一个前提条件,就是有向图中不能出现回路。

算法的基本思想就是在每次dfs返回时将顶点增加到返回结果中。

所以代码能够这样写:

import java.util.Stack; public class DepthFirstOrder {    private boolean[] visited;    private Stack
postOrder = new Stack
(); public DepthFirstOrder(Graph G) { visited = new boolean[G.V()]; for (int v = 0; v < G.V(); v++) { // 注意:这句话不能遗漏。这句话保证了全部的任务都可以被运行到。 dfs(G, v); } } public Iterable
sort() { return postOrder; } private void dfs(Graph G, int s) { visited[s] = true; for (int i : G.adj(s)) { // 注意:这个地方是迭代邻居顶点而不是全部顶点 if (!visited[s]) { dfs(G, i); } } postOrder.add(s); }}

回路检測

这个算法还能够找出一个有向图中是否含有回路。

回路检測在Java中有应用的。

比方一段Java代码写成这样,循环继承,那么编译的时候就会报错。

public class A extends B {} public class B extends C {} public class C extends A {}

在微软的Excel中也有应用,比方三个格子中含有循环的引用,这时候就会出现错误消息。

转载于:https://www.cnblogs.com/bhlsheji/p/4357923.html

你可能感兴趣的文章
Galaxy Nexus 全屏显示-隐藏Navigation Bar
查看>>
Spring中使用Velocity模板
查看>>
上周热点回顾(8.18-8.24)
查看>>
Feature toggle
查看>>
day02
查看>>
gvim 配置Pydiction
查看>>
Linux安装指定mysql版本
查看>>
分布式锁的三种实现方式
查看>>
poj 2109 pow函数也能这么用?p的开n次方
查看>>
Oracle database link
查看>>
清北学堂2017NOIP冬令营入学测试P4749 F’s problem(f)
查看>>
POJ 1840 Eqs HASH
查看>>
python调用shell小技巧
查看>>
TL431的几种常用用法
查看>>
BZOJ 1833: [ZJOI2010]count 数字计数( dp )
查看>>
关于toString()和String()要说几句话
查看>>
bzoj 3751[NOIP2014]解方程
查看>>
CSS(二) 文字样式属性,背景和列表
查看>>
js 经典闭包题目详解
查看>>
在项目中移除CocoaPods
查看>>