建立一个有向图,并且用弗洛伊德算法计算出最短路径,用C语言实现
时间: 2024-04-08 12:32:58 浏览: 165
C 代码 实现弗洛伊德算法以查找最短距离 在有向图上的节点对之间.rar
好的,我会帮你建立一个有向图并使用C语言实现弗洛伊德算法来计算最短路径。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <limits.h>
#define INF INT_MAX
#define V 4 // 图中节点的数量
void floydWarshall(int graph[][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] != INF && dist[k][j] != INF && 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("%7s", "INF");
} else {
printf("%7d", dist[i][j]);
}
}
printf("\n");
}
}
int main() {
int graph[V][V] = {
{0, 3, INF, 7},
{8, 0, 2, INF},
{5, INF, 0, 1},
{2, INF, INF, 0}
};
floydWarshall(graph);
return 0;
}
```
在这个示例代码中,我们使用邻接矩阵来表示有向图,其中`INF`表示无穷大。你可以根据自己的需求修改图的节点数量`V`和边的权重。运行代码后,它将输出最短路径矩阵,其中每个元素代表从一个节点到另一个节点的最短路径长度。
希望这个示例能对你有所帮助!如果你有任何其他问题,请随时提问。
阅读全文