数据结构复习之最短路径及拓扑排序

最短路径描述

仅讨论单源最短路径问题:从某个源点S∈V到G中其余各顶点的最短路径。对于求多源点的最短路径问题,可以用每个顶点作为源点调用一次单源最短路径问题算法予以解决。

迪杰斯特位(Dijkstra)算法

描述

计算一个顶点到其他所有顶点的最短路径。主要特点是以起始点为中心向外层扩展,直到扩展到终点为止。

思想

数组S记录了当前从源点到该顶点存在最短路径的顶点集合
数组dist(简称D)记录当前状态源点到图中其余各顶点之间的最短路径长度;
数组path(简称P)是最短路径的路径数组,其中path[j]表示从源点到顶点j的最短路径上顶点的前驱顶点。

每一次循环都是从数组D中选择未被加入到数组S中的顶点到源点路径最短的顶点加入到数组S中,然后对数组D和数组P进行修改,直到所有顶点都加到了数组S 中为止。
执行过程:如下图所示:
在这里插入图片描述

计算机执行过程模拟;

循环集合S(最短路径的顶点集合)jD[1] D[2] D[3] D[4] D[5](记录起点到其他顶点最短路径长度)P[1]P[2]P[3]P[4]P[5](最短路径上 的直接前驱)
初始化{1}起点10 9 ∞ ∞ 18(比较直连的路径长度哪个短,哪个短就入集合s)0 l 0 0 1
2{1,2}20 9 14 ∞ 18(从刚入s的V2开始找到最短路径长度,只有V3)0 1 2 0 1
3{l,2,3}30 9 14 17 16(从V3开始有V4V5,到v5路径长度要短,所以下一个入集合s的是V5)0 l 2 3 3
4{1,2,3,5}50 9 14 17 160 1 2 3 3
5{1,2,3,5,4}40 9 14 17 160 1 2 3 3

真题 2021年4月

在这里插入图片描述

图是一个无向图。

源点最短路径终点路径长度
aa,cc10
aa,c,bb12
aa,c,dd13
aa,b,ee22
aa,c,d ,ff21

拓扑排序

对一有向图,如果从Vi到Vj存在一条路径,且在由图中所有顶点构成的线性序列中,Vi总在Vj之前,那么这样的线性序列就被称为拓扑序列。构造一个有向图的拓扑序列的过程称为拓扑排序。

有向图转成拓扑条件

① 初始时有向图中必须至少有一个入度为0的顶点。
② 有向图中不存在回路。
满足以上两条的有向图称为AOV网

拓扑排序过程

① 从有向图中选择一个入度为0的顶点;
② 从有向图中将该顶点以及由该顶点发出的所有弧全部删除;
③ 重复上述过程,直到剩余的网中不再存在入度为0的顶点。
如下图所示:
在这里插入图片描述

拓扑排序的结果为:C1,C4,C2,C7,C9,C3,C6,C5,C8

拓扑排序算法的时间复杂度为O(n+e)。
4,C2,C7,C9,C3,C6,C5,C8

拓扑排序算法的时间复杂度为O(n+e)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

guangod

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

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

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

打赏作者

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

抵扣说明:

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

余额充值