计算完全最短路径的Floyd算法剖析
来源:互联网 发布:excel数据汇总公式 编辑:程序博客网 时间:2024/06/06 01:07
到两个重要矩阵:
1.d[numVex][numVex] (numVex图的顶点数):最开始该矩阵就是图的邻接矩阵,经过Floyd算法处理开后,d[numVex][numVex]中的d[i][j],表示着从顶点i到j的最短路径的权重。
2.p[numVex][numVex]:p[i][j]表示从i到j的最短路径上 i的后继,例如1到5最短路劲为1-2-4-5 那么p[1][5]==2 ,最开始构建的p矩阵中p[i][j]= j
算法核心思想: 三圈for循环
第一层 k是作为中间顶点
第二层 v是作为起始顶点
第三层 w是作为终点顶点
内层核心代码:
以v为起点,w为终点,再以k作为v和w之间的中间点,去判断d[v][ w]和d[v][k] + d[k][w]的大小关系,如果d[v][w] > d[v][k] + d[k][w],说明找到从v→w的更短路径了,此时更改d[v][w]的值为d[v][k] + d[k][w]。
p[v][w]的值也要相应改成p[v][k]的值,因为 p[v][k]的值是v→k最短路径上v的后继顶点,而v→w这段最短路径是连接在v→k这段路径后面的,所以令所当然p[v][w]也要指向p[v][k]。
注意:最外层的k循环,前面的n次循环的结果跟后面n+1次循环的错做过程是息息相关,
三次循环完成后,各个顶点之间的最短路径权重会存储在d矩阵中:d[i][j]表示i→j的最短路径权重。
p中则存储着路径上的顶点,如果把i→j最短路径上的顶点列出来呢?
用一个while循环循环 index = p[index][end];直到达到终点
假设该最短路径为 start→A→B→C→end
则执行过程是:
测试:
- 计算完全最短路径的Floyd算法剖析
- 计算完全最短路径的Floyd算法剖析
- 计算完全最短路径的Floyd算法
- 计算完全最短路径的Floyd算法
- floyd最短路径算法的实现
- Floyd最短路径算法
- 最短路径(Floyd算法)
- 最短路径 floyd算法
- 最短路径--Floyd算法
- Floyd最短路径算法
- Floyd最短路径算法
- 最短路径Floyd算法
- 最短路径 Floyd算法
- Floyd最短路径算法
- 最短路径floyd算法
- 最短路径(floyd算法)
- Floyd最短路径算法
- 【最短路径】Floyd算法
- 【codeforces 750E】New Year and Old Subsequence
- 在Eclipse里设置格式化代码时不格式化注释
- 兔子-Android Studio中创建library
- spark 配置指南
- Sqrt(x)
- 计算完全最短路径的Floyd算法剖析
- docker 安装报错,解决办法
- [Android]_[RxJava的基本使用]
- 高德地图1---地图加载、标记地点、信息窗体
- CentOS6.5下安装MySql5.7.17
- BZOJ1565: [NOI2009]植物大战僵尸 最小割 拓扑排序
- Android基础—小白篇(三):为自己的APK描眉画眼——布局And控件(布局篇)
- windows下Nginx配置虚拟域名
- Android进阶系列--Design Support Library使用详解(Snackbar,TextInputLayout,TabLayout,NavigationView...)