#include <stdio.h>
#include <limits.h>
#define V 4 // 图中节点的数量
// 打印最短路径的矩阵
void printSolution(int dist[][V]) {
printf("最短路径矩阵:\n");
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
if (dist[i][j] == INT_MAX)
printf("INF\t");
else
printf("%d\t", dist[i][j]);
}
printf("\n");
}
}
// 佛洛依德算法的实现
void floydWarshall(int graph[][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] != INT_MAX && dist[k][j] != INT_MAX &&
dist[i][k] + dist[k][j] < dist[i][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
// 打印最终的最短路径矩阵
printSolution(dist);
}
int main() {
int graph[V][V] = {{0, 5, INT_MAX, 10},
{INT_MAX, 0, 3, INT_MAX},
{INT_MAX, INT_MAX, 0, 1},
{INT_MAX, INT_MAX, INT_MAX, 0}};
floydWarshall(graph);
return 0;
}
弗洛伊德最短路径算法
最新推荐文章于 2024-05-11 14:30:05 发布