领会Floyd算法求带权有向图的单源最短路径,参考教材图8.35,输出顶点间的最段路径。用C语言编写代码
时间: 2024-12-13 10:17:15 浏览: 2
C语言实现图的最短路径Floyd算法
5星 · 资源好评率100%
Floyd-Warshall算法是一种用于计算所有顶点对之间最短路径的动态规划方法,特别适合于处理带权重的有向图。在这个算法中,它通过逐步更新每个节点到其他所有节点的最短路径来工作。虽然教材图8.35并没有直接提供代码,但我可以为你展示一个简单的C语言实现:
```c
#include <stdio.h>
#define V 4 // 图的顶点数
int dist[V][V]; // 存储距离矩阵
void floydWarshall(int graph[V][V]) {
int i, j, k;
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];
}
}
}
}
// 示例输入:带权重的有向图(这里仅示例,真实数据需替换)
int main() {
int graph[V][V] = { {0, 4, 0, 0},
{0, 0, 8, 0},
{0, 0, 0, 7},
{0, 0, 9, 0} }; // 从第i个顶点到第j个顶点的权重
dist[0][0] = 0; // 初始化从自身到自身的距离为0
for (int i = 0; i < V; i++)
dist[i][i] = 0;
floydWarshall(graph);
printf("单源最短路径表:\n");
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
printf("%d -> %d: %d\n", i, j, dist[i][j]);
}
}
return 0;
}
```
这个程序首先初始化了距离矩阵,然后调用`floydWarshall`函数来计算最短路径。最后,它打印出每个顶点之间的最短路径。
阅读全文