求大神帮忙理清一下Dijkstra算法

qq_45456576 2019-08-11 03:48:41
为什么这道题我用Dijkstra算法总是得到13457啊 (我是个跨考的小白)从4选择到5或者6时 4到5的权值总和比4到6要小 但事实上再到7的权值总和5到7比6到7大 为什么会这样 4选择是到5还是6到底是怎么操作啊
...全文
52 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leo Bliss 2019-08-13
  • 打赏
  • 举报
回复
加油,理清算法基本思想,多加练习就好
qq_45456576 2019-08-13
  • 打赏
  • 举报
回复
引用 2 楼 tb_youth的回复:
当你选择4号点,4的可达点有3,5,6但是3是已用过的点(不能松弛),对5,6松弛,分别是8,10。此时离起点最近的是5号点,它可达4,7,4不能松弛,对7松弛得到15。此时离起点最近的点有2,6,它们此时离起点距离都是10,随便选一个,我先选2,2可达点有1,5,1已经用过,对5松弛,因为10+1>8,松弛失败,5号点保留为8。此时离起点最近的是6号点,6号点的可达点为3,4,7,只有7号点可以松弛,10+3<15,松弛成功,到7号点的距离更新为13。所以是1-3-4-6-7
懂了 谢谢大佬愿意为这种低级问题码字 感谢感谢
Leo Bliss 2019-08-12
  • 打赏
  • 举报
回复
当你选择4号点,4的可达点有3,5,6但是3是已用过的点(不能松弛),对5,6松弛,分别是8,10。此时离起点最近的是5号点,它可达4,7,4不能松弛,对7松弛得到15。此时离起点最近的点有2,6,它们此时离起点距离都是10,随便选一个,我先选2,2可达点有1,5,1已经用过,对5松弛,因为10+1>8,松弛失败,5号点保留为8。此时离起点最近的是6号点,6号点的可达点为3,4,7,只有7号点可以松弛,10+3<15,松弛成功,到7号点的距离更新为13。所以是1-3-4-6-7
Leo Bliss 2019-08-12
  • 打赏
  • 举报
回复
画图模拟一遍,维护一个与起点距离的dis数组,每次选离起点最近且没有用过的那个点,对这个点的可达点进行松弛

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧