C语言弗洛伊德算法求最短路径代码加注释
时间: 2023-08-18 14:19:54 浏览: 89
C# floyd算法 求最短路径
5星 · 资源好评率100%
好的,下面是C语言弗洛伊德算法求最短路径的代码加注释:
```c
#include <stdio.h>
#define INF 0x3f3f3f3f // 无穷大的表示,这里使用十六进制表示
int main()
{
int n, m; // n为节点数,m为边数
scanf("%d%d", &n, &m); // 输入节点数和边数
int dist[n+1][n+1]; // 存储节点之间的距离
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
dist[i][j] = INF; // 初始化距离为无穷大
for(int i = 1; i <= m; i++)
{
int u, v, w;
scanf("%d%d%d", &u, &v, &w); // 输入边的起点、终点和权值
dist[u][v] = w; // 存储起点到终点的距离
}
for(int k = 1; k <= n; k++) // 枚举中间节点
for(int i = 1; i <= n; i++) // 枚举起点
for(int j = 1; j <= n; j++) // 枚举终点
if(dist[i][k] + dist[k][j] < dist[i][j]) // 如果经过中间节点k可以缩短i到j的距离
dist[i][j] = dist[i][k] + dist[k][j]; // 更新i到j的距离
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
printf("%d ", dist[i][j]); // 输出节点之间的最短距离
printf("\n");
}
return 0;
}
```
注释已经加上了,该算法的具体实现步骤如下:
1. 初始化节点之间的距离为无穷大
2. 输入每条边的起点、终点和权值,存储起点到终点的距离
3. 枚举每个中间节点,依次枚举起点和终点,如果经过中间节点可以缩短起点到终点的距离,则更新起点到终点的距离
4. 输出节点之间的最短距离
阅读全文