图之最短路径之迪杰斯特拉算法
来源:互联网 发布:keynote软件下载 编辑:程序博客网 时间:2024/06/18 14:36
一般最短路径算法有迪杰斯特拉算法和弗洛伊德算法,对于有负权值的需要使用弗洛伊德算法,这里主要讲解迪杰斯特拉算法
1.算法思想
设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。
应用场景:我们时常会面临着对路径选择的决策问题,例如在中国的一些一线城市如北京、上海、广州、深圳等,一般从A点到到达B点都要通过几次地铁、公交的换乘才可以到达。
2.例子详解
资料摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html
3.迪杰斯特拉算法代码
思路:从某个顶点开始,找其相邻顶点的最短边,将其相邻顶点加入到已访问顶点中,还要从前边已经访问顶点中看是否存在到当前顶点的更短路径,这样就找到当前顶点的最短路径,当当前顶点走到尽头,要进行检查,是否还有未被访问的顶点,找到其与相邻的已被访问顶点T的最小边,则从起点经T到当前顶点即为其最短路径
代码:
输入:
v0 v1 v2 v3 v4 v5 v6 v7 v8
0 1 5 65535 65535 65535 65535 65535 65535
1 0 3 7 5 65535 65535 65535 65535
5 3 0 65535 1 7 65535 65535 65535
65535 7 65535 0 2 65535 3 65535 65535
65535 5 1 2 0 3 6 9 65535
65535 65535 7 65535 3 0 65535 5 65535
65535 65535 65535 3 6 65535 0 2 7
65535 65535 65535 65535 9 5 2 0 4
65535 65535 65535 65535 65535 65535 7 4 0
输出:
v0->v0 0
v0->v1 1
v0->v1->v2 4
v0->v1->v2->v4->v3 7
v0->v1->v2->v4 5
v0->v1->v2->v4->v5 8
v0->v1->v2->v4->v3->v6 10
v0->v1->v2->v4->v3->v6->v7 12
v0->v1->v2->v4->v3->v6->v7->v8 16
- 图算法之最短路径算法
- 图之最短路径之迪杰斯特拉算法
- 图算法:最短路径之迪杰斯特拉算法
- 最短路径之迪杰斯特拉(Dijkstra)算法
- 最短路径之迪杰斯特拉算法
- 最短路径之迪杰斯特拉算法
- 十八、图算法之最短路径
- 图之 最短路径 Floyd算法
- 图之 最短路径 Dijkstra迪杰斯特拉算法
- 图之最短路径:迪杰斯特拉(Dijkstra)算法
- 最短路径算法之SPFA算法
- 图之最短路径之弗洛伊德算法
- 图之有权最短路径-迪杰斯特拉
- 算法:最短路径之迪杰斯特拉(Dijkstra)算法
- 最短路径算法之 Dijkstra(迪杰斯特拉)算法
- 数据结构与算法之最短路径--迪杰斯特拉算法
- 最短路径之迪杰斯特拉
- 图论算法之最短路径(Dijkstra算法)
- 使用批处理进行定时关机(试用于win8.1)
- 一个开发在线工具网,没事可以看看
- Android通过layer-list为控件绘制一边或多边边线的方法
- C#入门9.6——属性的使用(1)
- springMVC+jcrop实现头像上传截图功能
- 图之最短路径之迪杰斯特拉算法
- Android 条形进度条
- JAVA连接MySQL样板
- 浏览器加载js的阻塞与非阻塞
- 每天一个c++小程序(1):快速排序
- bzoj1068(区间dp,字符串压缩)
- nginx按日期存储日志
- python中的下划线
- CSU 1113 Updating a Dictionary