C语言floyed算法
时间: 2023-07-10 22:07:25 浏览: 99
C语言实现Floyd算法
Floyd算法,又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法。Floyd算法的时间复杂度为O(N^3),其中N表示图中节点的数量。
以下是C语言实现Floyd算法的代码:
```c
#include<stdio.h>
#define INF 9999999
int main()
{
int n,m;
int dist[101][101];
scanf("%d%d",&n,&m);
// 初始化距离矩阵
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j) dist[i][j]=0; // 节点到自身的距离为0
else dist[i][j]=INF; // 其他节点之间的距离先设为无穷大
}
}
// 读入边
for(int i=1;i<=m;i++)
{
int a,b,w;
scanf("%d%d%d",&a,&b,&w);
dist[a][b]=w;
}
// Floyd算法核心代码
for(int k=1;k<=n;k++) // 中转点
{
for(int i=1;i<=n;i++) // 起始点
{
for(int j=1;j<=n;j++) // 终点
{
if(dist[i][j] > dist[i][k]+dist[k][j])
{
dist[i][j] = dist[i][k]+dist[k][j];
}
}
}
}
// 输出结果
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(dist[i][j]==INF) printf("INF ");
else printf("%d ",dist[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个例子中,我们读入了一个n个节点,m条边的图。通过Floyd算法,我们计算出了任意两个节点之间的最短距离,并输出结果。
阅读全文