最短路径问题——Dijkstra算法的理解

1、最短路径的概念

从一个顶点到另一个顶点所经过的边的权重和最小的一条路径,即最短路径。

Dijkstra算法通常用来解决无负权边的图的最短路径问题,算法复杂度O(Elog(V))。

2、算法思路

首先在图中任意选定好顶点,比如0。创建一个数组(最好是最小索引堆),其用来存储与顶点0相连的点的最短距离。由第一张图可以看出,目前除了0点本身距离为0,其他的顶点距离都还没记录。不急。
在这里插入图片描述
第二步,我们从顶点0出发,遍历一遍与顶点0相连的边,在数组中记录下权重。
在这里插入图片描述
由图片我们可以很明显的看出,0到2的距离是最短的,这也意味着0不管走哪条路线到2,不可能比该条路线要短,因此记录下每个顶点距离后,我们既可以确定0-2已经是最短路径,也可以确定如果0到别的节点有别的更短路径,那么肯定要经过2。我们拿2出来进行遍历邻边。
在这里插入图片描述
由于2到1的距离加上0-2的距离要小于0直接到达1的距离,因此在表中更新距离数据,这样的操作专业术语叫松弛(relaxation)。由于2已经遍历过,加上此时确定0-2-1是0到达1的最短路径,所以接下来从没有遍历过的距离最短的点1中出发遍历。

以此种方法遍历完所有的顶点后,即找出了图中顶点0到任一顶点的最短路径,路径长度存储在该数组中。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值