问题描述
现已知有N(N<=10)个城市M(M<=30)条路,保证每个城市之间有路,单向到达,每个城市之间的路程不一样,求任意两个城市之间的最短路程
样例输入
4 8
1 2 2
1 3 6
1 4 4
2 3 3
3 1 7
3 4 1
4 1 5
4 3 12
样例输出
0 2 5 4
9 0 3 4
6 8 0 1
5 7 10 0
程序代码:
#include<stdio.h>
int a[200][200];
int main()
{
int i,n,j,k,a1,b1,c1,m;
int inf=999999;
scanf("%d%d",&n,&m);
//初始化各个城市之间的路程
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
if(i==j)
a[i][j]=0;//若为同一个地点则值为零
else
a[i][j]=inf;//否则置为最大的
}
//读入每个城市之间的距离
for(i=1;i<=m;i++){
scanf("%d%d%d",&a1,&b1,&c1);
a[a1][b1]=c1;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]>a[i][k]+a[k][j])//若从i到j的距离比从i到k再从k到j的距离大就把原来的距离进行更新
a[i][j]=a[i][k]+a[k][j];
//输出各个城市之间最短的路程
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}