多源最短路径 Floyd
来源:互联网 发布:年轻女装品牌知乎 编辑:程序博客网 时间:2024/05/22 12:27
/*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 0x3FFFFFFFclass 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; /*最短路径*/ } } } } }