两个矩阵,一个记录权值,一个记录路径。

代码实现示例:

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
#include<iostream>
#include<vector>

using namespace std;

void Floyd(Graph G, int path[][]) {
int d[G.vexnum][G.vexnum];
int v, w;
for(v = 0;v<G.vexnum;v++) {
for(w=0;w<G.vexnum;w++) {
d[v][w] = G.arcs[v][w];
path[v][w] = -1;
}
}
int u;
for(u=0;u<G.vexnum;u++) {
for(v=0;v<G.vexnum;v++){
for(w=0;w<G.vexnum;w++) {
if((d[v][u] + d[u][w]) < d[v][w] && v!=w) {
d[v][w] = d[v][u] + d[u][w];
path[v][w] = u;
}
}
}
}
}