建物流中转站
建物流中转站_牛客网
https://www.nowcoder.com/practice/c82efaf9e2cc42cda0a8ad795845eceb?tpId=98&&tqId=33067&rp=1&ru=/activity/oj&qru=/ta/2019test/question-ranking
Shopee物流会有很多个中转站。在选址的过程中,会选择离用户最近的地方建一个物流中转站。
假设给你一个二维平面网格,每个格子是房子则为1,或者是空地则为0。找到一个空地修建一个物流中转站,使得这个物流中转站到所有的房子的距离之和最小。 能修建,则返回最小的距离和。如果无法修建,则返回 -1。
若范围限制在100*100以内的网格,如何计算出最小的距离和?
当平面网格非常大的情况下,如何避免不必要的计算?
思路:采用了最笨拙最容易想到的方法,当然如果题干设置时间条件存在一定风险,不过对于这题,简单穷举最终还是AC了。另外关于更好的方法还请大家分享。
#include <stdio.h>
#include <math.h>
#define N 100
#define M 100
int main()
{
int n,i,j,k,l,len=0,min=-1,temp=0;
int arr[M][N];
scanf("%d",&n);
for (i = 0; i < n; ++i)
{
for (j = 0; j< n; ++j)
{
scanf("%d",&arr[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(arr[i][j]==0)
{
for(k=0;k<n;k++)
{
for(l=0;l<n;l++)
{
if(arr[k][l]==1)
{
temp=fabs(k-i)+fabs(l-j);
len+=temp;
}
}
}
if (min==-1)
min=len;
if(len<=min)
min=len;
len=0;
}
}
}
printf("%d",min);
return 0;
}