数据结构 Dijkstra算法

全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总

虽然浙大的数据结构视频在前面讲的都很简单,但是讲到Dijkstra算法时,在课程中看到这样的解释我的内心是很懵逼的:

所以我还是画个图来看看怎么操作的吧,就用课程里的例子:

 

假设我们要找到v1到v6的最短路径,

建立一个dis数组,为了方面描述,坐标设为从1到7。鉴于没有负数,我们设还没遍历到的点为-1。

从1出发,1到1不需要任何路程,设为0。然后1可以到2或者到4,这里要注意的是我们选里面最小的作为确定路径

第一轮:因为大家可以假设,你从1出发,到4需要路程为1,到2需要路程为2,也就是说,如果你再从2蹦到4,值一定比直接到4大。把1和4标记出来。

第二轮:从v4可以到v3,v5,v6,v7,先都写下来,从v1到v2是里面最小的,我们把2进行收录。:

第三轮:从v2出发,可以到v4和v5,v4已经收录了,从v1经过v2到v5的距离为12,大于之前的3,所以不记录进去。我们收录里面最小的v3。

第四轮:从v3出发,只能到v6,总路径为8,小于之前经过v4到v6的9,所以我们把8记录进去,收录里面最小的v5:

第五轮:从v5出发,只能到v7,总路径为9,大于之前的5,所以不记录进去,收录v7.

第六轮:从v7出发,能到v6,距离为6,小于8,所以记录6,并把v6收录。

不难验证这里面都是从1到其他顶点的最短路径。

题目中的问题:如果路径按照递增(非递减)顺序生成,真正的最短路径一定经过已经收录的顶点?

反证法:假如到顶点v的最短路径没有经过已经收录的顶点,设经过某点w,则s->w->v就小于s->已收录点->v,而因为我们的生成顺序是递增或非递减的,则因为w还没有被收录进去,所以s->w(小于s->w->v)就不可能比s->v更小(因为我们这次操作已经把v收录进去了)

题目:Dijkstra算法中的dist应该如何初始化?如果s到w有直接的边,则dist[w]=<s,w>的权重;否则dist[w]定义为

  • A. 正无穷

  • B. 负无穷

  • C. -1

  • D. 这三种都可以

选A,因为程序表示

根据里面的不等式,要找路径最小的那个,所以其他边都应该是正无穷。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dezeming

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

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

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

打赏作者

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

抵扣说明:

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

余额充值