用c语言用floyd算法解决最短路径问题
时间: 2024-02-20 12:01:54 浏览: 90
好的,下面是使用 C 语言实现 Floyd 算法解决最短路径问题的示例代码。假设我们有一个 n 个节点的有向图,用一个二维数组 graph 存储它的邻接矩阵表示,其中 graph[i][j] 表示从节点 i 到节点 j 的边权值。我们需要求解任意两个节点之间的最短路径,最终将结果存储在一个二维数组 dist 中。
```c
#include <stdio.h>
#include <stdlib.h>
#define INF 0x3f3f3f3f
void floyd(int **graph, int n, int **dist) {
int i, j, k;
// 初始化 dist 数组
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
dist[i][j] = graph[i][j];
}
}
// 逐步更新 dist 数组
for (k = 0; k < n; k++) {
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (dist[i][k] + dist[k][j] < dist[i][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
}
int main() {
int n = 4;
int **graph = (int **)malloc(n * sizeof(int *));
int **dist = (int **)malloc(n * sizeof(int *));
int i, j;
for (i = 0; i < n; i++) {
graph[i] = (int *)malloc(n * sizeof(int));
dist[i] = (int *)malloc(n * sizeof(int));
}
graph[0][0] = 0; graph[0][1] = 2; graph[0][2] = 6; graph[0][3] = 4;
graph[1][0] = INF; graph[1][1] = 0; graph[1][2] = 3; graph[1][3] = INF;
graph[2][0] = 7; graph[2][1] = INF; graph[2][2] = 0; graph[2][3] = 1;
graph[3][0] = 5; graph[3][1] = INF; graph[3][2] = 12; graph[3][3] = 0;
floyd(graph, n, dist);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%d ", dist[i][j]);
}
printf("\n");
}
return 0;
}
```
在上面的代码中,我们使用了一个二维数组 graph 来存储邻接矩阵表示的有向图,使用了一个二维数组 dist 来存储任意两个节点之间的最短路径长度,其中 INF 表示无穷大。在 floyd 函数中,我们首先将 dist 数组初始化为 graph 数组,然后通过三重循环逐步更新 dist 数组。最后,在主函数中输出 dist 数组的值。
希望这个示例代码能够帮助你理解 Floyd 算法的实现过程。
阅读全文