弗洛伊德最短路径算法c
时间: 2023-09-13 16:05:34 浏览: 91
以下是使用C语言实现弗洛伊德最短路径算法的示例代码:
```c
#include <stdio.h>
#define INF 9999
void floyd(int n, int graph[][n]) {
int dist[n][n];
int i, j, k;
// 初始化dist数组
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
dist[i][j] = graph[i][j];
}
}
// 计算最短路径
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];
}
}
}
}
// 输出最短路径
printf("最短路径矩阵:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (dist[i][j] == INF) {
printf("INF\t");
} else {
printf("%d\t", dist[i][j]);
}
}
printf("\n");
}
}
int main() {
int graph[4][4] = {{0, 5, INF, 10},
{INF, 0, 3, INF},
{INF, INF, 0, 1},
{INF, INF, INF, 0}};
floyd(4, graph);
return 0;
}
```
在该示例代码中,我们定义了一个`floyd`函数来实现弗洛伊德最短路径算法。该函数接受两个参数:`n`和`graph`。其中,`n`表示图的顶点数,`graph`是一个二维数组,表示图的邻接矩阵。
在函数内部,我们首先将`dist`数组初始化为邻接矩阵`graph`,然后使用三重循环计算最短路径。最后,输出最短路径矩阵。
在主函数中,我们定义了一个4x4的图,并将其作为参数传递给`floyd`函数。
阅读全文