贪心算法-最短路径之迪杰斯特拉算法

现在我们来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3、4、5、6号顶点的最短路径。

最短路径示例图

定义源点为1,dist[i]为源点1到顶点 i 的最短路径。其过程描述如下:

步骤dist[1]dist[2]dist[3]dist[4]dist[5]dist[6]找到的集合
第1步0112+∞+∞+∞{1,2}
第2步××104+∞+∞{1,2,4}
第3步××8×1719{1,2,4,3}
第4步××××1319{1,2,4,3,5}
第5步×××××17{1,2,4,3,5,6}
第6步××××××{1,2,4,3,5,6}

第 1 步:从源点 1 开始,找到与其邻接的点:2,3,更新dist[]数组,因 1 不与 4,5,6 邻接,故dist[4],dist[5],dist[6]为正无穷。在dist[]中找到最小值,其顶点为 2,即此时已找到1 到 2 的最短路。

第 2 步:从 {1,2} 开始,继续更新dist[]数组:
2 与 3 邻接,因1→2→4→3比dist[3]小,故更新dist[3] =1+9=10;
2 与 4 邻接,因1→2→4比dist[4]小,故更新dist[4]为 4;2 与 5,6不邻接,不更新。

在dist[]中找到最小值,其顶点为 4,即此时又找到 1 到 4 的最短路。

第 3 步:从 {1,2,4} 开始,继续更新dist[]数组:
4 与 3 邻接,因1→2→4→3比dist[3]小,故更新dist[3] =4+4=8;
4 与 5 邻接,因1→2→4→5比dist[5]小,故更新dist[5] =4+13=17;
4 与 6 邻接,因1→2→4→6比dist[6]小,故更新dist[6] =4+15=19;

在dist[]中找到最小值,其顶点为 3,即此时又找到 1 到 3 的最短路。

第 4 步:从 {1,2,4,3} 开始,继续更新dist[]数组:
3 与 5 邻接,因1→2→4→3→5比dist[5]小,故更新dist[5] =8+5=13。
在dist[]中找到最小值,其顶点为 5,即此时又找到 1 到 5 的最短路。

第 5 步:从 {1,2,4,3,5} 开始,继续更新dist[]数组:
5 与 6 邻接,因1→2→4→3→5→6比dist[6]小,故更新dist[6] =13+4=17。

第 6 步:所有点都已找到,停止。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值