#include <stdio.h>
#define INF 210000000 // INF表示一个非常大的数,作为不可达的标志
#define N 4 // 图的顶点数
// min函数,用于返回两个数中较小的那个,简化后续计算过程
int min(int a, int b){
return a > b ? b : a;
}
// floyd函数,执行Floyd-Warshall算法,更新matrix数组,计算任意两点之间的最短路径
void floyd(int matrix[N][N], int n){
for (int k = 0; k < n; ++k) { // 外层循环k,表示中间节点
for (int i = 0; i < n; ++i) { // 第二层循环i,表示起点
for (int j = 0; j < n; ++j) { // 内层循环j,表示终点
// 更新matrix[i][j],通过k节点尝试找到更短的路径
matrix[i][j] = min(matrix[i][k] + matrix[k][j], matrix[i][j]);
}
}
}
}
int main(){
// 初始化图的邻接矩阵,表示顶点之间的边的权重
int matrix[N][N] = {{0, 1, INF, INF}, // 从顶点0到其他顶点的边的权重
{4, 0, INF, 5}, // 从顶点1到其他顶点的边的权重
{INF, 2, 0, INF}, // 从顶点2到其他顶点的边的权重
{3, INF, 7, 0}}; // 从顶点3到其他顶点的边的权重
// 调用floyd函数,计算最短路径
floyd(matrix, N);
// 打印更新后的最短路径矩阵
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j)
printf("%d ", matrix[i][j]); // 打印从顶点i到顶点j的最短路径
putchar('\n'); // 每打印一行之后换行
}
}
Floyd 算法计算最短路径
最新推荐文章于 2025-03-13 09:52:08 发布
3729

被折叠的 条评论
为什么被折叠?



