图的最短路径 -- Dijkstra 算法详解
来源:互联网 发布:外勤软件哪个好 编辑:程序博客网 时间:2024/05/09 17:49
经典的算法,求两个城市间的最短距离。
治学之道,最忌知其然而不知其所以然。所以今天就让我们来一步一步了解图,最短路径算法Dijkstra
以下是来自经典算法书籍 § Algorithms 的图的Java表示:
Princeton Graph.java
Bag.java
以下是Dijkstra 算法的证明:
Dijkstra's Algorithm的证明
麻省理工大学算法公开课:Dijkstra 算法-麻省理工大学
其实看完最短路径算法第一节课就大概明白了Dijkstra算法的原理。
这里存在一个假设:我们不存在任何的负权边。如果有负权边,我们是不能使用Dijkstra算法的。因为它使用的是贪心算法。
证明: 维护一个已经是最短距离顶点的set1, 以及其它顶点的set.
每次搜索余下的所有的点,找到一个最短距离的顶点,将它加到set1。为什么它就是最短距离呢?
Proof:
假设找到的这个点是A点,假如如果我们可以从set1中到B点再到A点,因为dist[src][B] > dist[src][A],
所以dist[src][B] + dist[B][A] >= dist[src][A],所以经过B的路径还是比从set直接到A要远。因此我们找到的从原点到A的路径就是最短路径。
这样就可以把A点加入到set1中。
set1中加入A点后,我们要把与A相接的所有的点的距离值全部更新一次(即所有的点都算一次经过A点的距离。)这样我们可以更新从set1出发到其它点的距离。
以下是代码。在此代码中,我们使用邻接矩阵来表示图,如果是稀疏图,其实应该用邻接链表来表示,也就是前面所述的Bag,这里就不详述啦:
测试结果:
[0, 0]
[0, 1]
[0, 3, 2]
[0, 3]
[0, 3, 2, 4]
The shortest path length from start to 0 is:0
The shortest path length from start to 1 is:10
The shortest path length from start to 2 is:50
The shortest path length from start to 3 is:30
The shortest path length from start to 4 is:60
- 图的最短路径 -- Dijkstra 算法详解
- 图的最短路径dijkstra算法
- Dijkstra算法--图的最短路径
- Dijkstra最短路径算法详解
- 最短路径问题---Dijkstra算法详解
- 最短路径问题---Dijkstra算法详解
- Dijkstra 最短路径算法详解 无向图
- 图算法 最短路径 Dijkstra算法
- 图的最短路径算法Dijkstra算法
- 图的最短路径(dijkstra算法/floyd算法)
- 【算法】图的最短路径(Dijkstra算法)
- Dijkstra算法的最短路径实现
- Dijkstra 算法求非负权图的最短路径
- dijkstra最短路径算法的实现
- 最短路径的Dijkstra算法
- Dijkstra最短路径算法的优化
- 图的最短路径算法(Dijkstra,Floyd)的实现
- 图-最短路径-Dijkstra算法
- [概率dp] hdu 5001 Walk
- socket通信的几篇好文章
- hdu 5033 Building
- ZOJ--1654--Place the Robots【二分图最大匹配】
- 第十六章 16.1.5节练习
- 图的最短路径 -- Dijkstra 算法详解
- 我的项目9 网页之间传值二 HTML5本地存储
- Android编程学习系列:第一篇,搭建开发平台
- java POIUtil
- 多叉树 转换为二叉树 算法
- ios Study Log 20140923-0.07
- 一张图深度解析Linux共享内存的内核实现
- (ZT)socket通讯原理以及tcp、ip三次握手机制分析
- StoneDB关系型数据库,全力支撑企业去IOE