最短路径算法实现

什么是最短路径呢? 考虑到带权路径图,我们把一条路径上经过的权值之和是该路径的路径长度或者是带权路径长度。

那么我来个案例,比如我们还是村庄之间修路,我们指定了一个村庄起点和终点,假如我们修路只能在由村庄之间修路的全部可能情况之中选择一种,也就是说我们想从我们指定的村庄开始修路,修到我们指定的目的地,我们找到那条开销最小的路径,也就是1权值最小。

相比最小生成树,是整个村庄之间修路开销最小,生成树是相对于全部的修路情况中得到的,最短路径又是从生成树中选择出来一条最小开销的路,最小开销的路径也许不仅仅就是一个。

现在引出问题,我们想比如在我们的村庄之间修路问题,我们想从任意一个村庄到其他村庄之间修路开销最小问题,也可以说是最短路径。 这个路径其实就是村庄之间的权值之和最短,也就是村庄之间修路的开销问题。
当然我们的问题很明显是针对带权图的。

现在我们一个大神叫Dijkstra 发了一个用自己名字命名的求单源最短路径算法。中文名叫狄克斯特拉。

我们求最短路径的过程分析:
首先我们是把全部的顶点集合分成2组, 一个集合是用来存放我们的最短路径上的顶点集合 ,另外一个是存放我们的非在最短路径上的顶点。

刚开始查询之前我们的第一个集合只有一个起点 第二个集合保存了除了起点以外的全部顶点

后面我们根据起点去第二个集合中找在最短路径上的顶点,如果找到我们就加入到最短路径顶点集合中去,并且把他从非最短路径顶点集合中移除掉,一直检测,直到全部在最短路径上的点加入到了最短路径缓存集合,我们就终止查找操作。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

牛掰是怎么形成的

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

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

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

打赏作者

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

抵扣说明:

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

余额充值