必威体育Betway必威体育官网
当前位置:首页 > IT技术

拓扑排序

时间:2019-10-10 05:42:15来源:IT技术作者:seo实验室小编阅读:82次「手机版」
 

拓扑排序

DAG有向无环图

AOV网:顶点表示活动,弧表示活动间先后关系的有向图,即活动在顶点上的网络

拓扑序列:将AOV所有顶点v0,v1,...vn-1排成线性序列vi0,vi1,...vin-1,满足:若vi到vj有一条路径,则vi排在vj前面。vi0,vi1,...vin-1就是一个拓扑序列(不一定唯一)

拓扑排序步骤:

在有向图中选一个入度为0的顶点,且输出;

在图中删除该顶点和以它为尾的弧;

重复这两部,直至全部顶点输出,此时得到无环有向图的所有顶点的拓扑序列;或者图中剩下顶点中再也没有入度为0的顶点,此时拓扑序列不存在,且图中必有环。

有向无环图,拓扑排序过程如下: 

这里写图片描述

首先,V6和v1是没有前驱的,所以我们就随机选去一个输出,我们先输出V6,删除和V6有关的边,得到如下图结果: 

这里写图片描述

然后继续寻找没有前驱的顶点,发现V1没有前驱,所以输出V1,删除和V1有关的边,得到下图的结果: 

这里写图片描述

然后,又发现V4和V3都是没有前驱的,那么就随机选取一个顶点输出(具体看你实现的算法和图存储结构),我们输出V4,得到如下图结果: 

这里写图片描述

然后,我们输出没有前驱的顶点V3,得到如下结果: 

这里写图片描述

然后,我们分别输出V5和V2,最后全部顶点输出完成,该图的一个拓扑序列为:

v6–>v1—->v4—>v3—>v5—>v2

拓扑排序算法的实现:

AOV网用邻接表(表头节点增加一个入度域,先求出每个顶点的入度)作为存储结构,以栈作为辅助存储空间

(1)扫描邻接表的顶点表,找入度为0的顶点入栈

(2)当栈非空时:

a、弹出栈顶元素(设vj),输出

b、在邻接表中找vj直接后继vk,将vk入度减1,将入度减为0的顶点入栈

(3)栈空时,若输出顶点数小于AOV网顶点总数,则必存在环,不存在拓扑序列。否则得到全部顶点的一个拓扑序列。

为节省存储空间,具体实现时可利用邻接表中顶点节点入度域为0的入度域建立静态链表,即静态链栈。

设游标模拟栈顶指针,游标变量top存放入度域为0的顶点下标(top=入度为0的顶点号)。

初始时top=-1。

遇到入度域为0的顶点将其入栈时,当前top值写入入度域,top=顶点号;

出栈时,top=其所指顶点节点的入度域的值

相关阅读

冒泡法排序(c语言)

7-1 冒泡法排序(20 分) 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后

二叉排序树(BST查找、插入、删除、遍历)——基于树的查

二叉排序树 二叉排序树(Binary Search Tree,BST):又称二叉查找树,是一种高效的数据结构。 定义 二叉排序树或者是一棵空树,或者是具有

八大排序算法--堆排序

序言 对于堆排序的学习,实际上就是对于 堆 这一种数据结构的学习,把堆学会了,堆排序自然也就学会了。1、为什么使用堆这种数据结构

excel表格中制作比赛排序自动评分表的方法是什么

传统的评分表是都是用手工记录、手工或计算器计算,然后再人工排序,这样做不仅效率低下,利用Excel中排序等相关功能制作的评分表,使总

各种排序算法总结(全面)

目录 冒泡排序 改进的冒泡排序(鸡尾酒排序) 选择排序 插入排序 二分插入排序 希尔排序 快速排序 归并排序 堆排序 计数排序 基数

分享到:

栏目导航

推荐阅读

热门阅读