用c语言写一个floyd算法
时间: 2023-03-16 20:44:03 浏览: 114
我可以为您提供一个c语言实现的Floyd算法的示例代码: // Floyd算法:
#define N 100 // 图的顶点数
int dis[N][N]; // 邻接矩阵
// 初始化
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
dis[i][j] = (i == j) ? 0 : INF; // INF表示两点不可达 // Floyd算法
for (int k = 0; k < N; k++)
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
相关问题
请用C语言写一个弗洛伊德算法
#include <stdio.h>
#define INF 99999
#define MAX_VERTICES 100
void floyd(int graph[MAX_VERTICES][MAX_VERTICES], int n) {
int dist[MAX_VERTICES][MAX_VERTICES];
int i, j, k;
// 初始化距离矩阵
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
dist[i][j] = graph[i][j];
}
}
// Floyd算法核心
for (k = 0; k < n; k++) {
for (i = 0; i < n; i++) {
for (j = 0; j < n; 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 < n; i++) {
for (j = 0; j < n; j++) {
if (dist[i][j] == INF) {
printf("INF ");
} else {
printf("%d ", dist[i][j]);
}
}
printf("\n");
}
}
int main() {
int graph[MAX_VERTICES][MAX_VERTICES] = {
{0, INF, 5, INF},
{50, 0, INF, 15},
{30, INF, 0, 5},
{INF, 20, INF, 0}
};
floyd(graph, 4);
return 0;
}
用C++写一个floyd算法
好的,以下是用C语言实现Floyd算法的代码:
```c
#include <stdio.h>
#define INF 99999
void floyd(int graph[][4], int n) {
int dist[n][n];
int i, j, k;
// 初始化距离矩阵
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
dist[i][j] = graph[i][j];
}
}
// 通过中间顶点更新距离矩阵
for (k = 0; k < n; k++) {
for (i = 0; i < n; i++) {
for (j = 0; j < n; 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 < n; i++) {
for (j = 0; j < n; j++) {
if (dist[i][j] == INF) {
printf("INF ");
} else {
printf("%d ", dist[i][j]);
}
}
printf("\n");
}
}
int main() {
int graph[4][4] = {
{0, 5, INF, 10},
{INF, 0, 3, INF},
{INF, INF, 0, 1},
{INF, INF, INF, 0}
};
floyd(graph, 4);
return 0;
}
```
这段代码实现了Floyd算法,用于求解带权有向图中任意两点之间的最短路径。
阅读全文