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

拓扑排序

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

一、定义

对一个有向无环图(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。


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

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

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

相关文章

树的遍历

在应用树结构解决问题时,往往要求按照某种此项获得树中全部结点的信息,这种操作叫做树的遍历。遍历的方法有很多种。常用的有:A. 先序遍历:先访问根结点,再从左到右按照先序思想遍历各子树。B. 后序遍历:...

【题解】采药的最短路径

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

C++中箭头指针的含义及用法

C++中箭头指针的含义及用法

0.前言c++中我们在一些程序中看到箭头 p—>stu 类似于这样的表示。今天就简单来解释一下点运算和箭头运算。1.点运算常见的点一般出现在结构体中,比如下面的代码:#include<io...

C++小项目——实时钟表

C++小项目——实时钟表

0.前言在很多游戏中,我们要使用时间,这个时间一个是系统当前的时间,一个是服务器给你的时间。这篇文章我们尝试做一个模拟时钟。效果图如下1.任务分解1.首先我们尝试使用easyx来画一个。基本框架如下:...

CSP-J2021年普及组复赛T2——插入排序

CSP-J2021年普及组复赛T2——插入排序

【题目描述】插入排序是一种非常常见且简单的排序算法。小 Z 是一名大一的新生,今天 H 老 师刚刚在上课的时候讲了插入排序算法。 假设比较两个元素的时间为 O(1),则插入排序可以以 O(n 2...

STL入门——容器1:vector (不定长度数组)

一、定义     vector是一个不定长度数组。不仅如此,它把一些常用操作“封装”在了 vector 类型内部。    ...