`
mmdev
  • 浏览: 12958609 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

单源最短路径问题[Dijkstra实现]

 
阅读更多

单源最短路径问题[Dijkstra实现]

一、问题

带权有向图G(E,V), 找出从给定源顶点s到其它顶点v的权最小路径。

“最短路径” = 最小权

二、问题求解:

求1到5的最短路径值?

三、执行过程:

如果大家对这个问题的要求还不是很明白的话那么我再带着大家走一遍:

第一次:从1-->2:10 此时从1-->3没有路径所有是无穷大 1-->4:30 1-->5:100那么我们发现这一组组最小的是10也就是2这一点,所以我们再把2这一点加到集合里面来,那么2这一点就可以当作一个桥来用,

第二次:此时我们再从1à3就可以通过1-->2-->3:60其他的1-->4:30

1-->5:100 可以发现此时最小的应该是3,所以我们再把3这一点加入到这个集合里面来,如此重复的去做这些事情,到最后可以发现1à5的最短路径应该是60(1-->4-->3-->5)

四、Dijkstra伪代码:

为何松弛操作:

也就是说如果1-->3这点的值为dist[3]>dist[2]+map[2][3]

那么dist[3]=dits[2]+map[2][3]

五、代码实现:

六、测试数据:

5 7
1 2 10
1 4 30
1 5 100
2 3 50
3 5 10
4 3 20
4 5 60

结果:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics