博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【图论】拓扑排序应用
阅读量:6616 次
发布时间:2019-06-24

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

拓扑排序虽是一种排序,但是它跟平时所接触的sort或者qsort不同,排序的意义不同。拓扑排序针对有向无回路图(DAG)而言的,不应用与存在回路的有向图。

有说到了BFS和DFS,拓扑排序是DFS的一个应用。

 

有向无回路图能说明事件的发生的先后的顺序。比如穿衣服,士兵排队等。一个具体的例子,有N个物体,下面给出物体的重量比较,比如(a,b)表示a比b重等等,问已给出的条件是否会矛盾?其实就是判断用所给条件所组织的一个图中是否会存在环?

在DFS中加入时间戳,完成DFS后让节点按第二时间戳排序,就得到了DAG的拓扑排序结果。 拓扑排序还可以解决这个问题。

下面是士兵排队,边(u,v)表示士兵u必须排在士兵v的前面。

DFS过程增加时间戳,然后按照时间戳来排列顶点就可以得到士兵的排列,就可以得到:

所以g在f的前面,f在e的前面…

拓扑排序实现

得到伪代码:

Code Sample
1
2
3
TOPLLOGICAL-SORT(G)
    
DFS   
/****带时间戳****/
    
/****按第二时间戳排序****/

拓扑排序判断有无环

拓扑排序可以用于有向图环的判断。对于有向无回路图来说,进行拓扑排序之后(将上面第二个图,可以参考一下),对于 (left,right),left指起点在左,right指终点在右,都有第二时间戳(right)<第二时间戳(left),也就是说如果违反 这个结果,图中是比存在环的。看看:

对于边(d,a)第二时间戳(a)>第二时间戳(d),此图存在环。利用拓扑排序还可以实现单源最短路径算法。

题外话:

我的算法还是比较水,硬着头皮去参加蓝桥杯的决赛,尽力啦!尽量不要让结果是打酱油的。蓝桥杯的比赛跟ACM/ICPC都很难,但是业内应该是ACM/ICPC更有威望的。也罢,去看看北京也好。

我们班就W和Z再加上我三个人,W很牛掰,较量起来根本不是对手,以后要好好向他学习!

真正让我学习算法的时间比较晚,因为一开始对其他的技术比较兴趣,也算是亡羊补牢,希望能有所收获吧。

转载 http://daoluan.net/blog/topological-sort/

你可能感兴趣的文章
Java web 开发填坑记 1 -如何正确的下载 eclipse
查看>>
iOS - Quartz 2D 第三方框架 Charts 绘制图表
查看>>
MM顾问的常见面试问题(ZZ)
查看>>
转:Windows 8上强制Visual Studio以管理员身份运行
查看>>
迟来的加勒比海盗3 观后
查看>>
类与对象 - PHP手册笔记
查看>>
谈一谈互联网创业补贴变味后的现象
查看>>
MapGIS转Shp文件的单位问题
查看>>
使用Karate轻松实现自动API测试
查看>>
React
查看>>
CentOS -bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8)
查看>>
编写一个基本的Android应用程序
查看>>
我的友情链接
查看>>
查看Linux操作系统安装的位数(getconf 命令应用)
查看>>
前后端中转服务remoteService的设计与实现
查看>>
ifstream读取文件失败和乱码问题
查看>>
Python信息采集器使用轻量级关系型数据库SQLite
查看>>
zookeeper中的exception的问题
查看>>
final+基本类型导致只编译常量类引起的错误
查看>>
分库分表的几种常见玩法及如何解决跨库查询等问题
查看>>