图论 ---dijkstra算法求最短路径的思想

迪杰斯特拉算法(dijkstra)

在这里插入图片描述
这里以v1为顶点,其他点为终点,vk代表该轮能达到最短路径的点,将s数组设为记录路径的数组

第一轮,v2与v3相比v2路径最短,

a=1a=2a=3a=4a=5
v21(v1,v2)
v312(v1,v3)
v4
v5
v6
vkv2
s{v1,v2}

将前驱结点更新为v2,此时v1到v3的路径为10,可更新;路径最短为v1到v4的路径

a=1a=2a=3a=4a=5
v21(v1,v2)
v312(v1,v3)10(v1,v2,v3)
v44(v1,v2,v4)
v5
v6
vkv2v4
s{v1,v2}{v1,v2,v4}

将前驱结点更新为v4,v1到v3的路径为7,可以更新;

a=1a=2a=3a=4a=5
v21(v1,v2)
v312(v1,v3)10(v1,v2,v3)7(v1,v2,v4,v3)
v44(v1,v2,v4)
v517(v1,v2,v4,v5)
v619(v1,v2,v4,v6)
vkv2v4v3
s{v1,v2}{v1,v2,v4}{v1,v2,v4,v3}

将前驱结点更新为v3,重复上述操作

a=1a=2a=3a=4a=5
v21(v1,v2)
v312(v1,v3)10(v1,v2,v3)7(v1,v2,v4,v3)
v44(v1,v2,v4)
v517(v1,v2,v4,v5)13(v1,v2,v4,v3,v5)
v619(v1,v2,v4,v6)19(v1,v2,v4,v6)
vkv2v4v3v5
s{v1,v2}{v1,v2,v4}{v1,v2,v4,v3}{v1,v2,v4,v3,v5}

将前驱结点更新为v5

a=1a=2a=3a=4a=5
v21(v1,v2)
v312(v1,v3)10(v1,v2,v3)7(v1,v2,v4,v3)
v44(v1,v2,v4)
v517(v1,v2,v4,v5)13(v1,v2,v4,v3,v5)
v619(v1,v2,v4,v6)19(v1,v2,v4,v6)17(v1,v2,v4,v3,v5,v6)
vkv2v4v3v5v6
s{v1,v2}{v1,v2,v4}{v1,v2,v4,v3}{v1,v2,v4,v3,v5}{v1,v2,v4,v3,v5,v6}

则该图v1到所有顶点的最短路径为{v1,v2,v4,v3,v5,v6}
最短路径的一个核心是动态更新前驱结点,而每次选择的结点都是通过贪心算法实现的,选择所有路径中最短的路径并将其最后一个结点更新为下一次出发的前驱结点。


我只是按照自己的理解整理了这篇笔记,也许讲的比较混乱。b站的一个up主的视频对这个算法的讲解比较通俗易懂:https://www.bilibili.com/video/BV1QK411V7V4?from=search&seid=4168589922693761411

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值