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

拓扑排序

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

一、定义

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


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

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

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

相关文章

【入门篇】C++ 中变量的简单使用

【入门篇】C++ 中变量的简单使用

1.什么是变量”变量“通俗来讲就是能变的量。在程序设计中,变量是一个个不同类型的盒子,当盒子里装了苹果时,盒子就代表苹果,当然,我们需要给一个个盒子起不同的名字。像下面的图片一样,一个盒子,给他取一个...

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

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

【算法】分治算法

前言所谓分治算法就是指分而治之,即将较大规模的问题分解成几个较小规模的问题,通过对较小问题的求解达到对整个问题的求解。当我们将问题分解成两个较小问题求解时的分治方法称为二分法。比如,我们玩过最简单的猜...

C++中的位宽与保留小数

C++中的位宽与保留小数

一、setw函数C++ setw() 函数用于设置字段的宽度,语法格式如下setw(n)比如:#include <bits/stdc++.h> using names...

【数论】杨辉三角

【数论】杨辉三角

一、起源 杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角...

C++读取磁盘文件

0.前言简单介绍一下C++读取文件的基本操作。关键技术:freopen() 文件的打开函数 FILE *fp fp=fopen(文件名,使用文件方式) 例如: fp...