多源最短路径 Floyd
2011-12-31 14:41
375 查看
/* Floyd.h 时间复杂库:O(N^3) 用途: 1.判断中否联通 s[a][b] != inf -> 联通 s[a][b] == inf -> 不联通 2.两点间最短路径长度 s[a][b] != inf -> 最短路径长度 = s[a][b] s[a][b] == inf -> 不联通 3.两点间的最短路径的跳数 初始化时所有路径长度设为单位长度 s[a][b] != inf -> 跳数 = s[a][b] s[a][b] == inf -> 不联通 */ #include <iostream> using namespace std; #define MAX 100 #define inf 0x3FFFFFFF class Floyd { public: int n; //记录两点间最短路径的长度 int s[MAX][MAX]; //记录最短路径 int path[MAX][MAX]; public: Floyd(int size = MAX); void clear(); void ShortestPath(); }; Floyd::Floyd(int size):n(size) { int i, j; for(i = 0; i < n; i++) { for(j = 0; j < n; j++) { if(i = j) s[i][j] = 0; else s[i][j] = inf; path[i][j] = j; } } } Floyd::clear() { int i, j; for(i = 0; i < n; i++) { for(j = 0; j < n; j++) { if(i = j) s[i][j] = 0; else s[i][j] = inf; path[i][j] = j; } } } void Floyd::ShortestPath() { int i,j,k; for(k = 0; k < MAX; k++) { for(i = 0; i < MAX; i++) { for(j = 0; j < MAX; j++) { if(s[i][j] > s[i][k] + s[k][j])) { s[i][j] = s[i][k] + s[k][j]; /*最短路径值*/ path[i][j] = k; /*最短路径*/ } } } } }
相关文章推荐
- Floyd最短路径算法---多源最短路
- Floyd 算法求多源最短路径
- hdu 2066一个人的旅行(多源最短路径Floyd)
- 多源最短路径Floyd、Floyd求最小环【模板】
- 多源最短路径——floyd-Warshall算法的拓展
- 多源最短路径 Floyd 算法(有向图) C实现 ~
- [置顶] 多源最短路径-Floyd-Warshall—C
- 多源最短路径问题-floyd warshall
- 多源最短路径---Floyd-Warshall算法
- Floyd 多源最短路径
- Floyd-Warshall多源最短路径
- 多源最短路径--Floyd-Warshall算法
- Floyd-Warshall多源最短路径
- Floyd 算法求多源最短路径-打印最短路径
- 【图】多源最短路径floyd
- AtCoder Beginner 073 joisino's travel(多源最短路径Floyd|DFS)
- 多源最短路径 Floyd
- POJ1125 Stockbroker Grapevine (Floyd求多源最短路径)
- 数据结构 学习笔记(八):图(中):最短路径问题(单源最短路径 Dijkstra,多源最短路径 Floyd)
- Floyd-Warshall解决多源最短路径问题-(只有五行的算法)