求地图中任意两点间的最短路径,依次允许经过1~n个顶点来更新两点的最小值,时间复杂度O(N^3),可以处理带有负权边的图,但不能处理带有负权回路的图
#include<stdio.h>
int main()
{
int e[50][50];
int inf=99999999;
int n,m,a,b,c,i,j,k;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==j)
e[i][j]=0;
else
e[i][j]=inf;
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
e[a][b]=c;
}
//核心算法,依次允许经过1~n个顶点来更新两点的最小值
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(e[i][j]>e[i][k]+e[k][j])
e[i][j]=e[i][k]+e[k][j];
}
//输出结果
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%10d",e[i][j]);
}
printf("\n");
}
return 0;
}