c语言实现弗洛伊德算法并能显示迭代过程
时间: 2023-07-15 09:12:13 浏览: 48
弗洛伊德算法(Floyd算法)是一种用于求解任意两点间最短路径的算法,它的基本思想是动态地维护每两个顶点之间的最短路径长度。下面是一个使用C语言实现弗洛伊德算法并能显示迭代过程的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define INF 99999
#define MAX 100
void floyd(int n, int graph[][MAX])
{
int i, j, k;
int dist[MAX][MAX];
// 初始化距离矩阵
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("k=%d, i=%d, j=%d, dist[%d][%d]=%d\n", k, i, j, i, j, dist[i][j]);
}
}
}
// 输出最短路径长度
printf("\n最短路径矩阵为:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (dist[i][j] == INF) {
printf("INF ");
} else {
printf("%d ", dist[i][j]);
}
}
printf("\n");
}
}
int main()
{
int n, graph[MAX][MAX], i, j;
printf("请输入图的顶点数:");
scanf("%d", &n);
printf("请输入图的邻接矩阵:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
if (graph[i][j] == 0) {
graph[i][j] = INF;
}
}
}
floyd(n, graph);
return 0;
}
```
在上面的代码中,我们使用了一个二维数组`graph`来存储图的邻接矩阵,其中`INF`表示两个顶点之间没有边相连。在算法执行过程中,我们动态地维护了一个二维数组`dist`,用于存储任意两个顶点之间的最短路径长度。在每次迭代更新`dist`数组时,我们都会显示当前的迭代过程,以便更好地理解算法的执行过程。最终,我们输出`dist`数组,即可得到任意两个顶点之间的最短路径长度。