算法六:floyd-warshall和dijkstra
来源:互联网 发布:sms软件 编辑:程序博客网 时间:2024/05/21 19:45
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,一直反复直把所有的“估计值”变成“确定值”,该确定值就是最短路径。
- 算法六:floyd-warshall和dijkstra
- 最短路径之Dijkstra算法和Floyd-Warshall算法
- Dijkstra/Floyd-Warshall 最短路径算法
- Warshall算法和Floyd算法
- 【最短路径】:Dijkstra算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法
- 地铁换乘—华为2014校招机试样题 —Dijkstra 和 Floyd-Warshall 算法解决
- DP之Warshall算法和Floyd算法
- 动态规划-Warshall算法和Floyd算法
- hdu 1874 畅通工程续 【Dijkstra Floyd-Warshall算法】
- 最短路径算法----Dijkstra Bellman-Ford Floyd-Warshall Johnson
- Dijkstra和Floyd算法
- Dijkstra和Floyd算法
- Dijkstra和Floyd算法
- dijkstra和floyd算法
- Dijkstra和Floyd算法
- HDOJ 1869 六度分离(Floyd 和 dijkstra 算法)
- floyd和warshall算法(作业)
- 动态规划的Warshall和Floyd算法:
- 数据对齐
- Python函数式编程
- CF 340A The Wall
- 模拟新浪微博随便看看
- JSP——EL表达式
- 算法六:floyd-warshall和dijkstra
- 完美解决Android SDK Manager无法更新
- php调用webservice的几种方法
- Enea公司----OSE/OSEck RTOS
- 云端开源⾼性能技术架构调研分析报告
- 关于zabbix agent安装配置的一些心得
- RequestAnimationFrame更好的实现Javascript动画
- (三层架构入门)最基本的三层架构搭建方法(详细过程及所有代码)
- 每天一个Linux命令-2(wc)