题目大意:
给出一个城市的地图,商店设在一点,使各个地方到商店距离之和最短。
思路:
这是一道最短路的问题。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;
}