弗洛伊德求最短路径C语言
时间: 2024-04-30 08:15:01 浏览: 113
C语言(floyd算法 最短路径)
4星 · 用户满意度95%
弗洛伊德算法(Floyd-Warshall algorithm)是一种用于求解图中所有节点对之间最短路径的动态规划算法。可以在有向图或无向图中找到任意两个节点之间的最短路径。
以下是使用C语言实现弗洛伊德算法的示例代码:
```c
#include <stdio.h>
#define INF 99999
#define V 4
void floydWarshall(int graph[V][V]) {
int dist[V][V], i, j, k;
// 初始化距离矩阵
for (i = 0; i < V; i++) {
for (j = 0; j < V; j++) {
dist[i][j] = graph[i][j];
}
}
// 通过中间节点逐步更新最短路径
for (k = 0; k < V; k++) {
for (i = 0; i < V; i++) {
for (j = 0; j < V; j++) {
if (dist[i][k] + dist[k][j] < dist[i][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
// 打印最短路径矩阵
printf("最短路径矩阵:\n");
for (i = 0; i < V; i++) {
for (j = 0; j < V; j++) {
if (dist[i][j] == INF) {
printf("INF ");
} else {
printf("%d ", dist[i][j]);
}
}
printf("\n");
}
}
int main() {
int graph[V][V] = {
{0, 5, INF, 10},
{INF, 0, 3, INF},
{INF, INF, 0, 1},
{INF, INF, INF, 0}
};
floydWarshall(graph);
return 0;
}
```
上述代码中,我们使用邻接矩阵来表示图的连接关系,其中`INF`表示两个节点之间没有直接连接。在算法的实现中,我们通过逐步更新距离矩阵来求解最短路径。最后,我们打印出最短路径矩阵,其中的值表示从一个节点到另一个节点的最短路径长度。
阅读全文