您的代码有几个问题导致输出都为0:
1. 在初始化距离矩阵时,没有正确赋值给`dist`变量。应该将`dist = graph[i][j]`。
2. 在主循环中,计算最短路径时,用到了错误的距离参量。应该将`dist`改为`graph[i][k]+graph[k][j]`。
3. 在输出结果时,使用了错误的变量`dist`,应该输出`graph[i][j]`。
修正后的代码如下所示:#include <stdio.h>#define Max 0xFFFF#define n 38void floyd(int graph[n][n])//弗洛伊德求各顶点之间的最短路径{ int dist[n][n]; for (int i = 0; i < n; i++)//初始化距离矩阵 { for (int j = 0; j < n; j++) dist[i][j] = graph[i][j]; } for (int k = 0; k < n; k++)//逐一考虑每个顶点作为中间顶点 { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (dist[i][j] > dist[i][k] + dist[k][j])//k作为中间顶点,可以缩短(i,j)的距离 dist[i][j] = dist[i][k] + dist[k][j]; } } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%4d", dist[i][j]); } printf("\n"); }}int main(){ int graph[n][n] = { {0, 6, 13}, {10, 0, 4}, {5, Max, 0} }; floyd(graph); return 0;}
修正后的代码中,修正了距离矩阵的赋值以及计算最短路径的错误,并且输出结果已改为打印`dist`而不是原本的`graph`。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |