请用c++代码实现弗洛伊德算法
时间: 2024-05-15 16:14:33 浏览: 84
C 代码 实现弗洛伊德算法以查找最短距离 在有向图上的节点对之间.rar
以下是C++代码实现弗洛伊德算法:
```c++
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f; // 定义无穷大
int dist[1005][1005]; // 存储任意两点之间的最短路径长度
void floyd(int n) {
for (int k = 1; k <= n; k++) { // 枚举中转点
for (int i = 1; i <= n; i++) { // 枚举起点
for (int j = 1; j <= n; j++) { // 枚举终点
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]); // 更新最短路径
}
}
}
}
int main() {
int n, m;
cin >> n >> m; // 输入点数和边数
memset(dist, INF, sizeof(dist)); // 初始化距离为无穷大
for (int i = 1; i <= n; i++) dist[i][i] = 0; // 自身到自身距离为0
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w; // 输入一条边的起点、终点和边权
dist[u][v] = min(dist[u][v], w); // 处理重边和自环边,取较小值
}
floyd(n); // 调用弗洛伊德算法
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << dist[i][j] << " "; // 输出任意两点之间的最短路径长度
}
cout << endl;
}
return 0;
}
```
其中,`dist[i][j]`表示点`i`到点`j`的最短路径长度,`floyd(n)`为弗洛伊德算法的核心代码,`min(dist[i][j], dist[i][k] + dist[k][j])`表示通过中转点`k`更新点`i`到点`j`的最短路径长度。
阅读全文