Floyd-Warshall算法--求任意两点最短距离
2016-12-06 23:56
344 查看
Floyd-Warshall算法
要求
求任意两点之间最短的路径?思路
使用之前学习的广度优先搜索或深度优先搜索对每两个点都进行一次搜索,共进行n^2次。本次使用方法:引入中转点k,如果i到k的距离 + k到j的距离 < i到j的距离,更新i到j的最短距离,将每个点做为中转点更新距离后就可以得到任意两点最短距离。
代码
#include <stdio.h> #define N 5 #define M 5 #define X 99999999 int a [M] = { { 0, 0, 0, 0, 0}, { 0, 0, 2, 6, 4}, { 0, X, 0, 3, X}, { 0, 7, X, 0, 1}, { 0, 5, X, 12, 0} }; void print_a() { for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { printf("%3d ", a[i][j]); } printf("\n"); } printf("\n"); } int main() { for (int k = 1; k < M; ++k) { for (int i = 1; i < N; ++i) { for (int j = 1; j < M; ++j) { if (a[i][k] + a[k][j] < a[i][j]) { a[i][j] = a[i][k] + a[k][j]; print_a(); } } } } return 0; }
时间复杂度
时间复杂度是O(N^3)相关文章推荐
- 任意两点之间的最短路径问题(Floyd-Warshall算法)
- 任意两点间最短距离floyd-warshall ---- POJ 2139 Six Degrees of Cowvin Bacon
- AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)
- 弗洛伊德(Floyd)算法求任意两点间的最短距离
- Floyd 任意两点间的最短距离 dp
- 任意两点间的最短路径---floyd_warshall算法
- Floyd-Warshall算法求任意两点间最短路径
- 任意两点的最短路问题 Floyd-Warshall算法
- poj1125 Stockbroker Grapevine 图论,任意两点间最短路径,floyd
- 图算法之Floyd-Warshall 算法-- 任意两点间最小距离
- HDU 4460 求任意两点最短距离的最大距离
- 【算法】Floyd-Warshall算法(任意两点间的最短路问题)(判断负圈)
- Floyd-Warshall算法---求解任意两节点的最短路径
- 图论02——任意两点间最短距离及路径
- Floyd-Warshall算法(求解任意两点间的最短路) 详解 + 变形 之 poj 2253 Frogger
- 图论03——改进的任意两点间最短距离及路径
- PAT程序设计练习——甲级1003(任意两个城市最短距离、Floyd最短路径算法)
- POJ 2139 Six Degrees of Cowvin Bacon(floyd两点间最短距离)
- Dijkstra [迪杰斯特拉]算法思路(求单点到其他每个点的各个最短路径)Floyd算法:任意两点间最短距离
- Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径