算法六:floyd-warshall和dijkstra

原创 2015年07月10日 15:12:33


Floyd-Warshall
求两点之间的最短路径
实际为“动态规划”的思想。
1、先只考虑通过1号顶点进行中转,求两点之间的最短路径,只需判断e[i][1]+e[1][j]<e[i][j],其中i为所有的点(1-n循环),j也一样。
2、接下来考虑1号和2号顶点中转,求两点之间的最短路径,只需判断e[i][2]+e[2][j]<e[i][j],其中i为所有的点(1-n循环),j也一样。
3、最后考虑经过1~n号所有顶点中转。
for(k=1;k<=n;k++)
{
 for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
   if(e[i][j]>e[i][k]+e[k][j])
    e[i][j]=e[j][k]+e[k][j];
}
时间复制度为O(N^3)

Dijkstra算法-通过边实现松弛
是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。注意该算法要求图中不存在负权边。

2)算法步骤:时间复制度O((M+N)LogN)

a.初始时,S只包含源点,即S={v},v的距离为0。U包含除v外的其他顶点,即:U={其余顶点},若v与U中顶点u有边,则<u,v>正常有权值,若u不是v的出边邻接点,则<u,v>权值为∞。

b.从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。

c.以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。

d.重复步骤b和c直到所有顶点都包含在S中。

例子:比如我们要求从1号顶点到其余各个顶点的最短路径:
1、二位数组e存储顶点之间边的关系,一位数组dis来存储1号顶点到其余各个顶点的初始路径。

2、先找一个离1号顶点最近的顶点(比如有a,b顶点),发现1-a的距离比较近,找到后就把“估计值”变成“确定值”。

3、定下a号顶点后,接下来再看a号顶点有哪些出边(比如有b,c顶点),再计算1通过a到b的距离,计算1到b的距离,看看那个小,如果小就把dis[b]更新为短的距离(松弛)。

4、再从b点出发,调到2,一直反复直把所有的“估计值”变成“确定值”,该确定值就是最短路径。

hdu 1874 畅通工程续 【Dijkstra Floyd-Warshall算法】

hdu 1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T...

带权最短路 Dijkstra, SPFA, Bellman-Ford, ASP, Floyd-Warshall 算法分析

图论中,用来求最短路的方法有很多,适用范围和时间复杂度也各不相同。 本文主要介绍的算法的代码主要来源如下: Dijkstra: Algorithms(《算法概论》)Sanjoy Dasgupt...

Dijkstra/Floyd-Warshall 最短路径算法

描述南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都派遣了...

带权最短路 Dijkstra、SPFA、Bellman-Ford、ASP、Floyd-Warshall 算法分析

图论中,用来求最短路的方法有很多,适用范围和时间复杂度也各不相同。本文主要介绍的算法的代码主要来源如下:Dijkstra: Algorithms(《算法概论》)Sanjoy Dasgupta, Chr...

【最短路径】:Dijkstra算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法

求最短路径最常用的算法有: Dijkstra算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法。 Dijkstra算法、SPFA算法、Bellman-Ford算法这三个...
  • liuchuo
  • liuchuo
  • 2016年07月21日 23:34
  • 1444

算法基础篇:常见图论最短路算法(Bellman-Ford→SPFA→Dijkstra Floyd-Warshall )入门以及代码解析

巩固基础篇:常见图论算法(Bellman-Ford→SPFS→Dijkstra Floyd-Warshall )入门以及代码解析...

POJ 3411-Paid Roads(状态压缩+dijkstra算法+floyd-warshall算法)

题目大意:给出一张有向图,求点1到点N的最短路,不同的是,对于每一条边,除了源点目标点和花费以外,还有额外点c,若走这条边之前到达过c点,花费会减少到另一个值P。如果最短路不存在,输出impossib...

floyd-warshall算法(c++)

  • 2011年11月14日 21:42
  • 4.95MB
  • 下载

最短路径 -- Floyd-Warshall & Dijkstra & spfa 学习和思考

最近在强化自己的图论算法,首先翻看以前的图论题目(此题需翻墙) Google APAC 2016 University Graduates Test Round A:Problem C. gCamp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法六:floyd-warshall和dijkstra
举报原因:
原因补充:

(最多只允许输入30个字)