题目大意:
给出一个城市的地图,商店设在一点,使各个地方到商店距离之和最短。
思路:
这是一道最短路的问题。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;
}
本文介绍了一种通过计算各个地点间的最短路径来确定城市中最佳商店位置的方法。该方法使用了Floyd算法来找到所有地点之间的最短路径,并进一步计算出使得所有区域到达商店总距离最短的位置。
2323

被折叠的 条评论
为什么被折叠?



