用弗洛伊德算法求出各个节点的最短路径,用c语言实现
时间: 2024-02-22 22:54:41 浏览: 75
好的,以下是用 C 语言实现弗洛伊德算法求出各个节点的最短路径的代码:
```c
#include <stdio.h>
#include <limits.h>
#define V 4 // 图中节点的数量
#define INF INT_MAX // 无穷大值
void floyd(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++) {
// 如果从 i 到 j 这条路径通过 k 更短,则更新 dist[i][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];
}
}
}
}
// 输出结果
printf("最短路径矩阵:\n");
for(int i = 0; i < V; i++) {
for(int j = 0; j < V; j++) {
if(dist[i][j] == INF) {
printf("INF ");
} else {
printf("%d ", dist[i][j]);
}
}
printf("\n");
}
}
int main() {
int graph[V][V] = {{0, 5, INF, 10},
{INF, 0, 3, INF},
{INF, INF, 0, 1},
{INF, INF, INF, 0}};
floyd(graph);
return 0;
}
```
这段代码中,我们定义了一个 4 个节点的图,使用邻接矩阵来表示各个节点之间的距离。然后,我们通过实现弗洛伊德算法,计算出各个节点之间的最短路径。最后,输出算法的结果矩阵。
希望对您有所帮助!
阅读全文