建物流中转站

建物流中转站_牛客网

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;

}


全部评论

相关推荐

11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务