数据结构之——拓补排序和并查集

1.拓补排序

1.有向无环图
如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图(Airected Acyclic Graph,ADG)。

AOV网(Activity On Vertex,AOV):指用顶点表示活动,而用边集表示活动间优先关系的有向图,例如下图中数学先导课程示意图就是AOV网,其中图的顶点表示各项课程,也就是“活动”;有向边表示课程的先导关系,也就是“活动间的优先关系”。显然,图中不应该存在有向环,否则会让优先关系出现逻辑错误,任何活动不能以它自己作为自己的前驱和后继。

2.拓补排序

拓补排序是将有向无环图G的所有顶点排成一个线性序列,使得对图G中的任意两个顶点u、v,如果存在边u->v,那么在序列中u一定在v前面。这个序列称为拓补排序。

以下图数学专业的某几门课程学习先后顺序为例,可以获知, “数学分析”是“复变函数”、“常微分方程”、“计算方法”的先导课程,“复变函数”是“实变函数”和“泛函函数”的先导课程,“实变函数”又是“泛函分析”的先导课程。显然,对一门课程来说,必须要先学习它的先导课程才能很好地学习这门课程,而且课程之间不能够形成环(如果“泛函分析”同时又是“空间解析几何”的先导课程,就乱套了)。

在这里插入图片描述

同时发现,如果课程之间没有直接或间接的先导关系,那么这两门学习的先后顺序是任意的,(例如“复变函数”与“计算方法”的学习顺序就是任意的)。于是可以把上面的课程排成一个学习的先后序列,使得这个序列中的课程顺序满足下图中的课程顺序。

在这里插入图片描述

拓补排序步骤如下:
(1)定义一个队列Q,并把所有入度为0的结点加入队列。
(2)取队首结点,输出,然后删去所有从它出发的边,并令这些边到达的顶点的入度减1ÿ

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值