最短路径算法

来源:互联网 发布:qq三国js技能介绍 编辑:程序博客网 时间:2024/05/01 04:53

参考:http://zh.wikipedia.org/wiki/%E6%9C%80%E7%9F%AD%E8%B7%AF%E9%97%AE%E9%A2%98

 

最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括:

  • 确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。适合使用Dijkstra算法。
  • 确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。
  • 确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。
  • 全局最短路径问题 - 求图中所有的最短路径。适合使用Floyd-Warshall算法。

用于解决最短路径问题的算法被称做“最短路径算法”, 有时被简称作“路径算法”。 最常用的路径算法有:

  • Dijkstra算法       迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题。    求单源、无负权的最短路。 
  • A*算法      http://wenku.baidu.com/link?url=VZOOwZKOZ-ssLzycvR8XXwY9_r01JgAI5dF-ecnRdoqsr9y6tFgT2BlxRARpuMv20-wyKSUYX-mfVJlwYaCcqkQeIK-3BG2a9ifesF2_Rhu
  • Bellman-Ford算法
  • SPFA算法 (Bellman-Ford算法的改进版本)
  • Floyd-Warshall算法      求多源、无负权边的最短路。用矩阵记录图。

           Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点到B,所以,我们假设dist(AB)为节点A到节点B的最短路径的距离,对于每一个节点K,我们检查dist(AK) + dist(KB) < dist(AB)是否成立,如果成立,证明从A到K再到B的路径比A直接到B的路径短,我们便设置 dist(AB) = dist(AK) + dist(KB),这样一来,当我们遍历完所有节点K,dist(AB)中记录的便是A到B的最短路径的距离。

  • Johnson算法
  • Bi-Direction BFS算法

 

  代码1.  Dijkstra 算法    参考:http://www.wutianqi.com/?p=1890      http://2728green-rock.blog.163.com/blog/static/43636790200901211848284/      

           

  • 牛人写的算法网址:

http://blog.csdn.net/v_july_v/article/details/6181485

http://www.cnblogs.com/hxsyl/p/3270401.html

http://www.wutianqi.com/?cat=30

http://dongxicheng.org/category/structure/

http://blog.csdn.net/fengchaokobe/article/details/7521780

 

0 0
原创粉丝点击