写一段C语言来实现的是 Floyd-Warshall 算法,用于求解所有点对之间的最短路径
时间: 2024-03-09 15:45:22 浏览: 30
好的,下面是一段用 C 语言实现的 Floyd-Warshall 算法的代码。假设图的邻接矩阵为 D,其中 D[i][j] 表示顶点 i 到顶点 j 的边的权重,如果 i 和 j 之间没有边,则 D[i][j] 的值为无穷大。
```
#define INF 0x3f3f3f3f
#define MAXN 1000
int D[MAXN][MAXN]; // 邻接矩阵
int n; // 顶点个数
void floyd_warshall() {
// 用邻接矩阵初始化距离矩阵
int i, j, k;
int dist[MAXN][MAXN];
memcpy(dist, D, sizeof(D));
for (k = 0; k < n; ++k) {
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++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];
}
}
}
}
// 输出结果
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");
}
}
```
在该代码中,我们使用了一个辅助矩阵 dist 来存储每对顶点之间的最短路径长度。在开始时,我们将 dist 初始化为邻接矩阵 D。对于每个中间顶点 k,我们检查所有的顶点对 (i, j),如果从 i 到 k 然后到 j 的路径比当前的最短路径更短,则更新 dist[i][j]。最终,dist 中存储的就是所有顶点对之间的最短路径长度。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)