题目大意:
给出一个城市的地图,商店设在一点,使各个地方到商店距离之和最短。
思路:
这是一道最短路的问题。a[i][j]表示从i到j的最短路径,最终求出最小值并输出。
代码:
#include <cstdio>
#include <iostream>
using namespace std;
int a[205][205],n,sum,minn;
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
if (a[i][j]==0&&i!=j) a[i][j]=99999999; //BUG,不知道为什么必须这样,否则无法AC
}
for (int k=1;k<=n;k++)
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (a[i][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j]; //寻找最短路
minn=2147483647;
for (int i=1;i<=n;i++)
{
sum=0;
for (int j=1;j<=n;j++)
sum+=a[i][j];
if (minn>sum) minn=sum; //寻找最好的位置
}
printf("%d\n",minn); //这是输出,知道吗?
return 0;
}