多源最短路径 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;     /*最短路径*/                 }              }          }      } }

原创粉丝点击