当前位置:首页 > C++知识 > 正文内容

拓扑排序

亿万年的星光4个月前 (07-27)C++知识496

一、定义

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

通俗地说,‌拓扑排序就是由某个集合上的一个偏序得到该集合上的一个全序的操作。‌

二、拓扑排序方法

(1)在有向图中选一个没有前驱的顶点且输出
(2)从图中删除该顶点和所有以他为尾的弧
(3)重复上述步骤,直到所有的顶点均已输出,或者当图中不存在无前驱的顶点为止。

比如下面这个图:

首先选取了没有前驱的顶点A,把它和以它为尾的弧删除后剩下的图如下:

再从中选取一个没有前趋的顶点。这里选择BCD都可以,我们假设选取的是B,那么删除这个顶点和以他为尾的弧,结果如下:

再从中选取一个没有前趋的顶点,选择C和D都可以,假设选取的是C,那么删除这个顶点和以它为尾的弧,结果如下:


从上面图中再选取一个没有前趋的顶点,选择D,然后把D和以D为尾的弧全部删除,结果如下:

最后剩下一个顶点E,那么其中一种拓扑排序就是ABCDE。


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

标签: 数据结构
分享给朋友:

相关文章

【数论】同余定理与同余方程

定义同余定理是数论中的一个重要概念。它的定义是这样的:给定一个整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m 得到一个整数,那么就成整数a和b对模m同余,记作a≡b(mod m...

【题解】采药的最短路径

【题目描述】少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由M×N个方格组成,有的方格内有...

【题解】奶牛的回音

【题目描述】奶牛们灰常享受在牛栏中牟叫,因為她们可以听到她们牟声的回音。虽然有时候并不能完全听到完整的回音。Bessie曾经是一个出色的秘书,所以她精确地纪录了所有的牟叫声及其回声。她很好奇到底两个声...

【STL】二分查找函数 lower_bound 和 upper_bound

一、 lower_bound【功能】在数组a中从a[begin]开始到a[end - 1]按照cmp函数来比较进行二分查找第一个大于等于k的数的地址,如果有第一个大于等于k的数则返回该数的地...

【题解】围圈报数(约瑟夫问题)

【题解】围圈报数(约瑟夫问题)

【题目描述】有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个热呢又出列,... ,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,......

C++中的max和min函数(最大值,最小值)

1.头文件      最大值最小值函数所在头文件是#include<algorithm>2.用法#include<iostream> #incl...