用c++实现这个算法
时间: 2023-08-04 15:13:03 浏览: 93
这里提供一个简单的C++实现,仅供参考:
```c++
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
const int MAX_N = 1000; // 最大节点数
const int INF = 0x3f3f3f3f; // 无穷大值
int n; // 节点数
int d[MAX_N][MAX_N]; // 距离矩阵
void floyd_warshall() {
for (int k = 0; k < n; ++k) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
}
}
}
int main() {
// 读入节点数
cin >> n;
// 初始化距离矩阵
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (i == j) {
d[i][j] = 0;
} else {
d[i][j] = INF;
}
}
}
// 读入边信息
int m;
cin >> m;
for (int i = 0; i < m; ++i) {
int u, v, w;
cin >> u >> v >> w;
d[u][v] = w;
}
// 使用 Floyd-Warshall 算法计算最短路径
floyd_warshall();
// 输出结果
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << d[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
该实现中使用了一个 $d$ 数组来表示任意两点之间的最短距离,初始值为 $INF$,即无穷大。读入边信息时,将有边相连的两个节点之间的距离赋值给 $d$ 数组。最后调用 `floyd_warshall` 函数来计算任意两点之间的最短距离。
阅读全文