算法六: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,一直反复直把所有的“估计值”变成“确定值”,该确定值就是最短路径。

最短路径—Dijkstra算法和Floyd算法(理解)

Floyd-Warshall——只有五行的算法 求任意两个点之间的最短路程。 从i号顶点到j号顶点只经过前k号顶点的最短路程,这是一种动态规划的思想。 for(k=1;k...
  • m0_37345402
  • m0_37345402
  • 2017年08月05日 00:02
  • 799

最短路算法 :Bellman-ford算法 & Dijkstra算法 & floyd算法 & SPFA算法详解&BFS

1、Bellman-Ford算法 2、Dijkstra算法(代码 以邻接矩阵为例) && Dijkstra + 优先队列的优化(也就是堆优化) 3、floyd-Warshall算法(代...
  • booyoungxu
  • booyoungxu
  • 2016年03月12日 21:38
  • 568

floyd-warshall算法

算法distancepathoutputcini  Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3)。我们平时所见的Floyd算法的一般形式...
  • dxx_111
  • dxx_111
  • 2015年08月21日 11:45
  • 586

Dijkstra算法、Floyd算法的区别与联系,并由此谈到greedy和DP

首先,Dijkstra算法与Floyd算法都是广度优先搜索的算法。都可以用来求单源点到其他所有点的最短路径。那么这两者的原理分别是怎样?彼此又有什么区别呢?求此有向图中起点1到其他所有点的最短距离在本...
  • liuyanling_cs
  • liuyanling_cs
  • 2017年02月21日 22:44
  • 2704

最短路径(三)—Bellman-Ford算法(解决负权边)

前两节我们写了Floyd-Warshall算法http://blog.csdn.net/wtyvhreal/article/details/43315705和 Dijkstra算法http://bl...
  • wtyvhreal
  • wtyvhreal
  • 2015年02月03日 15:45
  • 4048

Floyd算法与Dijkstra算法(最短路径)

Floyd算法: 最短路的实际引用: 题目描述: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候...
  • yinyu19950811
  • yinyu19950811
  • 2016年04月10日 11:37
  • 739

Dijkstra算法与Prim算法的异同

Dijkstra算法,Prim算法,数据结构,代码,时间复杂度,图论
  • qq284565035
  • qq284565035
  • 2016年06月04日 10:51
  • 2870

Dijkstra算法和A*算法试验对比

Dijkstra 算法     A* 算法
  • robinvista
  • robinvista
  • 2016年12月28日 20:45
  • 1520

最短路径之Dijkstra算法和Floyd-Warshall算法

最短路径算法 最短路径算法通常用在寻找图中任意两个结点之间的最短路径或者是求全局最短路径,像是包括Dijkstra、A*、Bellman-Ford、SPFA(Bellman-Ford的改进版...
  • zhangjunqis
  • zhangjunqis
  • 2017年08月14日 13:53
  • 193

[算法]Floyd-Warshall算法理解

关于弗洛伊德算法,各种资料都有介绍(如Wiki:https://zh.wikipedia.org/wiki/Floyd-Warshall%E7%AE%97%E6%B3%95),但是有一点疑问一直困惑了...
  • SlightK
  • SlightK
  • 2016年11月30日 21:49
  • 982
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法六:floyd-warshall和dijkstra
举报原因:
原因补充:

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