C语言实现floyd算法求最短路径完整的代码
时间: 2024-12-26 19:29:01 浏览: 13
Floyd-Warshall算法是一种用于求解有向图中最短路径的动态规划方法。以下是C语言实现的一个简单版本:
```c
#include <stdio.h>
#define V 4 // 图的顶点数
// 定义邻接矩阵表示图
int graph[V][V] = {
{0, 4, 0, 0},
{0, 0, 8, 0},
{0, 0, 0, 10},
{0, 0, 0, 0}
};
// 求解距离矩阵中所有节点对之间的最短路径
void floydWarshall(int dist[][V]) {
for (int k = 0; k < V; k++) {
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
if (dist[i][j] > dist[i][k] + dist[k][j])
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
// 打印最终的最短路径矩阵
void printSolution(int dist[][V]) {
printf("Final Shortest Path Matrix:\n");
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++)
printf("%d ", dist[i][j]);
printf("\n");
}
}
int main() {
int dist[V][V]; // 初始化距离矩阵为无穷大,除了对角线外
for (int i = 0; i < V; i++)
for (int j = 0; j < V; j++)
if (i != j)
dist[i][j] = INT_MAX;
// 对于每个顶点,初始化到自身的距离为0
for (int i = 0; i < V; i++)
dist[i][i] = 0;
floydWarshall(dist);
printSolution(dist);
return 0;
}
```
在这个例子中,我们首先创建了一个邻接矩阵代表图,然后使用`floydWarshall`函数计算出每对顶点之间的最短路径。最后,通过`printSolution`函数打印出结果。
阅读全文