弗洛伊德算法
全源最短路径
#include<cstdio>
#include<algorithm>
using namespace std;
const int inf=1000000000;
const int maxv=200;
int n,m;
int dis[maxv][maxv];
void Floyd()
{
for(int k=0;k<n;k++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(dis[i][k]!=inf&&dis[k][j]!=inf&&dis[i][k]+dis[k][j]<dis[i][j])
{
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
}
int main()
{
int u,v,w;
fill(dis[0],dis[0]+maxv*maxv,inf);
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
dis[i][i]=0;
}
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
dis[u][v]=w;
}
Floyd();
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%d ",dis[i][j]);
}
printf("\n");
}
return 0;
}
来源:CSDN
作者:康斯但丁丶
链接:https://blog.csdn.net/OpenStack_/article/details/104095600