用c++实现Floyd算法对于给定的有向网求每一对顶点之间的最短路径长度
以下是使用C++实现Floyd算法的代码:
#include<iostream>
#include<algorithm>
#include<climits>
using namespace std;
#define INF INT_MAX
#define V 4
void floydWarshall(int graph[V][V]) {
int dist[V][V];
// 初始化距离矩阵
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
dist[i][j] = graph[i][j];
}
}
// 更新距离矩阵
for (int k = 0; k < V; k++) {
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
if (dist[i][k] != INF && dist[k][j] != INF && dist[i][k] + dist[k][j] < dist[i][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
// 输出最短路径长度
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
if (dist[i][j] == INF) {
cout << "INF ";
} else {
cout << dist[i][j] << " ";
}
}
cout << endl;
}
}
int main() {
int graph[V][V] = {{0, 5, INF, 10},
{INF, 0, 3, INF},
{INF, INF, 0, 1},
{INF, INF, INF, 0}};
floydWarshall(graph);
return 0;
}
在这个例子中,我们使用一个4x4的矩阵来表示有向网的邻接矩阵。我们使用INF表示两个顶点之间没有直接连接。在main函数中,我们调用floydWarshall函数来计算每一对顶点之间的最短路径长度。输出结果将打印在控制台上
原文地址: https://www.cveoy.top/t/topic/iQfB 著作权归作者所有。请勿转载和采集!