设有n个城市,依次编号为 ,另外有一个文件保存n个城市之间的距离(每座城市之间的距离都小于等于 )。当两城市之间的距离等于-1时,表示这两个城市没有直接连接。求指定城市 到每一个城市 的最短距离。
第一行有两个整数 和 ,中间用空格隔开;以下是一个 的矩阵,表示城市间的距离,数据间用空格隔开。
输出指定城市k到各城市间的距离(从第0座城市开始,中间用空格分开)
3 1
0 3 1
3 0 2
1 2 0
3 0 2
其实这道题就是一个 的模板题,只要在读入的时候注意一下 的情况就好了
#include<cstdio>
#include<iostream>
using namespace std;
int f[105][105],n,k;
int main()
{
scanf("%d%d",&n,&k);
k++;
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j){
scanf("%d",&f[i][j]);
if (f[i][j]!=-1) f[j][i]=f[i][j];
else f[i][j]=f[j][i]=1e9;//预处理
}
f[k][k]=0;
for (int kk=1; kk<=n; ++kk)
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j)
if (f[i][j]>f[i][kk]+f[kk][j])
f[i][j]=f[i][kk]+f[kk][j];//Floyed模板
for (int i=1; i<=n; ++i)
printf("%d ",f[k][i]);
return 0;
}