C语言规定若干路径必经点实现floyed算法
时间: 2023-08-23 14:06:00 浏览: 121
Floyd算法(也称为Floyd-Warshall算法)是一种用于寻找加权图中最短路径的算法。它可以用来解决带有负权边的图的最短路径问题。在C语言中,实现Floyd算法需要以下步骤:
1. 定义一个二维数组来存储图的邻接矩阵。
2. 初始化邻接矩阵,将不存在的边的距离设置为无穷大,将存在的边的距离设置为它们的权值。
3. 进行三重循环,其中第一重循环控制中间节点,第二重循环控制起点,第三重循环控制终点。在循环过程中,计算每对节点之间的最短路径,并更新邻接矩阵中的距离。
4. 最后,输出邻接矩阵中的最短路径矩阵即可。
具体实现可以参考以下示例代码:
```c
#include <stdio.h>
#define MAX 1000000 //定义一个无穷大的距离
int main()
{
int n, m; //n表示点的个数,m表示边的个数
scanf("%d %d", &n, &m);
int graph[n][n]; //定义邻接矩阵
int i, j, k;
//初始化邻接矩阵
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
graph[i][j] = (i == j) ? 0 : MAX;
}
}
//读入边的信息,并更新邻接矩阵
int u, v, w;
for(i=0; i<m; i++)
{
scanf("%d %d %d", &u, &v, &w);
graph[u][v] = w;
}
//Floyd算法核心代码
for(k=0; k<n; k++)
{
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(graph[i][k] + graph[k][j] < graph[i][j])
{
graph[i][j] = graph[i][k] + graph[k][j];
}
}
}
}
//输出最短路径矩阵
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(graph[i][j] == MAX)
{
printf("INF ");
}
else
{
printf("%d ", graph[i][j]);
}
}
printf("\n");
}
return 0;
}
```
阅读全文