题目描述
给出一个城市的地图(用邻接矩阵表示),商店设在一点,使各个地方到商店距离之和最短。
Input
第一行为n(共有几个城市); N小于201
第二行至第n+1行为城市地图(用邻接矩阵表示);
Output
最短路径之和;
分析
很典型的图中心题目
方法是佛洛依德(dij莫名无法过)求出所有最短路然后加一下就好咯。
#include <iostream>
#include <cstdio>
using namespace std;
int n,a[201][201],i,j,k,an;
int main()
{
scanf("%d",&n);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
if (a[i][j]==0&&i!=j) a[i][j]=2147483647;
}
for (k=1;k<=n;k++)
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (a[i][k]+a[k][j]<a[i][j])
a[i][j]=a[i][k]+a[k][j];
an=2147483647;
for (i=1;i<=n;i++)
{
k=0;
for (j=1;j<=n;j++)
k+=a[i][j];
if (k<an) an=k;
}
printf("%d",an);
题库数据错误,原来的程序有一行打表