floyd算法求多源最短路径
2017-12-30 22:27
337 查看
关于floyd三重循环的问题可能有人有疑问:为什么k要放在在外层循环,这个牵扯到动态规划的问题,状态转移方程为dist[k][a][b] = min(dist[k-1][a][k] + dist[k-1][k][b] , dist[k-1][a][b]),当多使用了一个中间节点k来更新ab间距离的时候,需要知道k-1的时候对应的所有的ab间距,才能推导出新增k节点之后的所有ab间距,所以要把k=1的时候ab间所有间距更新完毕,才能开始更新k=2的时候的ab间距。动态规划理解了,这个问题其实很简单,如果还是看不懂,建议看我的01背包问题V[i][j]中的i为什么放在外层。
#define MAXINT 0xffff #define MAXSIZE 7 int amapBorder[MAXSIZE][MAXSIZE]; int vNum = 6; //总共有6个顶点元素 void floyd() { int dist[MAXSIZE][MAXSIZE]; int path[MAXSIZE][MAXSIZE]; for(int i = 1; i< vNum + 1; i++) { for(int j = 1; j < vNum + 1; j++) { dist[i][j] = amapBorder[i][j]; } } for(int k = 1;k < vNum + 1; k++) { for(int i = 1; i < vNum + 1; i++) { for(int j = 1; j < vNum + 1; j++) { if(dist[i][k] + dist[k][j] < dist[i][j]) { dist[i][j] = dist[i][k] + dist[k][j]; path[i][j] = k; } } } } }
相关文章推荐
- Floyd算法--多源最短路径
- 多源有权图的最短路径 floyd算法(动态规划能解决负权边)7.1.3
- 医院设置(多源最短路径--Floyd算法)
- 多源最短路径floyd算法
- 多源最短路径Floyd算法
- 算法基础 - 多源点最短路径(Floyd算法)
- 多源最短路径Floyd算法
- Floyd算法求多源最短路径
- 加权有向图----多源最短路径问题(Floyd算法)
- 多源最短路径--floyd算法
- 多源最短路径( Floyd算法)JAVA实现
- 最短路径基本介绍(1)--Floyd算法(多源最短路径,五行代码)
- 多源最短路径之Floyd算法
- 无权图单源最短路径算法和有权图单源最短路径算法(用到Dijkstra算法)和多源最短路径算法(用到Floyd算法)
- POJ 1125 (多源最短路径—Floyd算法)
- Floyd算法:用动态规划求解多源(全源)最短路径
- C语言实现图的最短路径Floyd算法
- LA 4080 (多源最短路径+边修改+最短路径树)
- [置顶] 多源最短路径-Floyd-Warshall—C
- 最短路径Dijkstra算法和Floyd算法整理、