迪杰斯特拉

求从一个地点出发,到地图上多个点的最短距离。
这里写图片描述

确定出发点为v0,用一个数组shortPath表示,v0到vi(i∈[1,9]的整数)。用另一个数组getShortPath表示是否找到v0到vi(i为数组下标)最短路径
这里写图片描述
shortPath = {0,1,5,#,#,#,#,#,#}
getShortPath={1,0,0,0,0,0,0,0,0}
如上图
v0行:v0到v1距离为1,到v2距离为5;

除已确定的shortPath中最短的距离为1,对应v0到v1的距离,
v1行:v1~v2=3,v1~v3=7,v1~v4=5;
getShortPath={1,1,0,0,0,0,0,0,0}
shortPath = {0,1,5,#,#,#,#,#,#}
{1,0,3,7,5,#,#,#,#}逐项+1较小的替换shortPath对应元素。
v0通过v1到达v2的距离(1+4)小于v0直接到v2的距离5
shortPath = {0,1,4,8,6,#,#,#,#}

除已确定的shortPath中最短的距离为4,对应v0到v2的距离;
v2行 :v2~v3=3,v2~v4=1,v2~v5=7
getShortPath={1,1,1,0,0,0,0,0,0}
shortPath = {0,1,4,8,6,#,#,#,#}
{5,3,0, #,1,#,7,#,#}逐项+4较小的替换shortPath对应元素。确定已经找到的不用再比较。
shortPath = {0,1,4,8,5,#,11,#,#}

除已确定的shortPath中最短的距离为5,对应v0到v4的距离,
v4行: v4~v1=5 , v4~v2=1 , v4~v3=2 , v4~v5=3, v4~v6=6, v4~v7=9
getShortPath={1,1,1,0,1,0,0,0,0}
shortPath = {0,1,4,8,5,#,11,#,#}
{#,5,1,2,0,3, 6,9,#}逐项+5比较,较小的替换shortPath元素。确定已经找到的不用再比较。
shortPath = {0,1,4,7,5,8,11,14,#}

除已确定的shortPath中最短的距离为7,对应v0到v3的距离,
v3行: v3~v1=7 , v3~v4=2 , v3~v6=3
getShortPath={1,1,1,1,1,0,0,0,0}
shortPath = {0,1,4,7,5,8,11,14,#}
{#,7,#,0,2,#, 3, #, #}逐项+7比较,较小的替换shortPath元素。确定已经找到的不用再比较。
shortPath = {0,1,4,7,5,8,10,14,#}

除已确定的shortPath中最短的距离为8,对应v0到v5的距离,
v5行: v5~v2=7 , v5~v4=3 , v5~v7=5
getShortPath={1,1,1,1,1,1,0,0,0}
shortPath = {0,1,4,7,5,8,10,14,#}
{#,#,7,#,3,0, #, 5, #}逐项+8比较,较小的替换shortPath元素。确定已经找到的不用再比较。
shortPath = {0,1,4,7,5,8,10,13,#}

除已确定的shortPath中最短的距离为10,对应v0到v6的距离,
v6行: v6~v3=3 , v6~v4=6 , v6~v7=2, v6~v8=7,
getShortPath={1,1,1,1,1,1,1,0,0}
shortPath = {0,1,4,7,5,8,10,14,#}
{#,#,#,3,6,#, 0, 2, 7}逐项+10比较,较小的替换shortPath元素。确定已经找到的不用再比较。
shortPath = {0,1,4,7,5,8,10,12,17}

除已确定的shortPath中最短的距离为12,对应v0到v7的距离,
v7行: v7~v4=9 , v7~v5=5 , v7~v6=2 , v7~v8=4
getShortPath={1,1,1,1,1,1,1,1,0}
shortPath = {0,1,4,7,5,8,10,10,17}
{#,#,#,#,9,5, 2, 0, 4}逐项+12比较,较小的替换shortPath元素。确定已经找到的不用再比较。
shortPath = {0,1,4,7,5,8,10,12,16}

除已确定的shortPath中最短的距离为14,对应v0到v8的距离,
getShortPath={1,1,1,1,1,1,1,1,1}

shortPath = {0,1,4,7,5,8,10,12,16}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值