图解Topo拓扑排序

本文详细介绍了Topo排序的概念,它不是真正的排序,而是针对有向无环图(AOV网)生成一个具有路径关系的序列。文章通过实例解释了Topo排序的思想和步骤,并给出了具体的代码实现,阐述了Topo排序在判断有向图是否存在环中的应用。
摘要由CSDN通过智能技术生成

往期文章目录 

【干货满满!】图解Dijkstra迪杰斯特拉

【上篇文章!】手撕Floyd弗洛伊德


目录

往期文章目录 

前言

一、Topo排序不是排序

二、AOV网和Topo序列

1.AOV网的概念

2.Topo序列的概念和思想

 三、topo排序的代码实现

 总结


前言

  无论是什么程序都要和数据打交道,一个好的程序员会选择更优的数据结构来更好的解决问题,因此数据结构的重要性不言而喻。数据结构的学习本质上是让我们能见到很多前辈在解决一些要求时间和空间的难点问题上设计出的一系列解决方法,我们可以在今后借鉴这些方法,也可以根据这些方法在遇到具体的新问题时提出自己的解决方法。(所以各种定义等字眼就不用过度深究啦,每个人的表达方式不一样而已),在此以下的所有代码都是仅供参考,并不是唯一的答案,只要逻辑上能行的通,写出来的代码能达到相同的结果,并且在复杂度上差不多,就行了。


一、Topo排序不是排序

首先我们要知道:topo排序并不是真的排序!topo排序是针对于有向无环图而言,搞出一个带有路径(前后)关系的一个序列,而这个序列就叫做topo序列;


二、AOV网和Topo序列

1.AOV网的概念

在一个表示工程的有向图中顶点表示活动,而边表示活动之间的优先级关系,这种图就叫AOV网 (记住这个V表示顶点嘛),所以AOV网是针对于顶点的,而不是针对于边(在图中只有两种关系:针对于顶点和针对于边);

2.Topo序列的概念和思想

  • 具有n个顶点的有向图,只要满足 Vi 到 Vj 有路径并且 Vi 要在 Vj 之前,对于这种顶点序列就叫做topo序列;
  • topo排序算法思想:在有向图中选一个没有前驱的节点,输出(放入序列中),从图中删除顶点和以它为尾的弧;

这是什么意思呢,我们以如下有向无环图为例:

 假设我们以出度为弧尾,那么根据上述topo排序的思想,我们要先找一个没有前驱的节点(也就是没有入度的节点),那么我们可以很容易的得到 V1 和 V5 都是没有前驱的节点,那我们先输出V1,并在图中删去 V1 以及以 V1 为尾的弧,如下图所示;

接着我们输出V5,在图中删去 V5 以及以 V5 为尾的弧,如下图所示;

 这个时候我们发现 V3 和 V4 也成了一个没有前驱的节点,那么我们就应该重复上述的步骤,输出V3 和 V4 并在图中删去与它们有关的顶点和弧;

输出V3: 

 输出V4:

 这时候 V2 和 V6 也成了没有前驱的节点并且在图中也没有它们的出度的弧,那么只要输出它们即可;

  • 所以经过如上的步骤,我们可以得到一个topo序列:{ V1 V5 V3 V4 V2 V6 };那么这就是topo排序的思想和实现topo序列的步骤;
  •  那么这时候可能有人就要问了:
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白还在写代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值