- 解决图中任意两点之间的最短路径问题
- 具体实现:
vvdist矩阵存放任意两个顶点间的最短路径长度(初始为正无穷)
vvparentPath矩阵存放任意两个顶点路径间,最后一个顶点的前一个结点的下标(初始为-1)
void FloydWarShall(vector<vector<W>>& vvdist, vector<vector<int>>& vvparentPath){
size_t n = _vertex.size();
vvdist.resize(n);
vvparentPath.resize(n);
for (size_t i = 0; i < n; i++){
vvdist[i].resize(n, MAX_W);
vvparentPath[i].resize(n, -1);
}
for (size_t i = 0; i < n; i++){
for (size_t j = 0; j < n; j++){
if (i == j){
vvdist[i][j] = 0;
}
if (_matrix[i][j] != MAX_W){
vvdist[i][j] = _matrix[i][j];
vvparentPath[i][j] = i;
}
}
}
for (size_t k = 0; k < n; k++){
for (size_t i = 0; i < n; i++){
for (size_t j = 0; j < n; j++){
if (vvdist[i][k] != MAX_W && vvdist[k][j] != MAX_W
&& vvdist[i][k] + vvdist[k][j] < vvdist[i][j]){
vvdist[i][j] = vvdist[i][k] + vvdist[k][j];
vvparentPath[i][j] = vvparentPath[k][j];
}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39