最短距离和(暴力求解)

题目描述

Shopee物流会有很多个中转站。在选址的过程中,会选择离用户最近的地方建一个物流中转站。

假设给你一个二维平面网格,每个格子是房子则为1,或者是空地则为0。找到一个空地修建一个物流中转站,使得这个物流中转站到所有的房子的距离之和最小。 能修建,则返回最小的距离和。如果无法修建,则返回 -1。

若范围限制在100*100以内的网格,如何计算出最小的距离和?

当平面网格非常大的情况下,如何避免不必要的计算?

输入描述

4
0 1 1 0
1 1 0 1
0 0 1 0
0 0 0 0

先输入方阵阶数,然后逐行输入房子和空地的数据,以空格分隔。

输出描述

8

能修建,则返回最小的距离和。如果无法修建,则返回 -1。

示例一

输入:

4
0 1 1 0
1 1 0 1
0 0 1 0
0 0 0 0

输出:

8

示例二

输入:

4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

输出:

-1

思路解析

该题可以用暴力求解的方式进行解答。通过遍历,如果方阵全为1则最短路径和为-1,否则遍历找出每一个为0的坐标,并对它到每个为1 结点的距离求和。借助一个辅助数组b,将每个计算出的距离和保存到数组中,然后查询最大值。

代码示例
import java.util.Scanner;
public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner in=new Scanner(System.in);//输入方阵阶数int n = in.nextInt();int a[][] = new int[n][n];//用于记录矩阵中1的个数int count=0;//输入方阵for(int i=0; i<n; i++){for(int j=0; j<n; j++){a[i][j] = in.nextInt();if(a[i][j]==1) {count++;}}}//定义一个辅助数组,用于记录中转站到各个房屋的最短距离int b[]=new int[n*n];//计算出最小距离和int c=0;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (a[i][j]==0) {//x1,y1分别为该中转站的坐标,sum为最短距离和int x1=i;int y1=j;int sum=0;for (int m = 0; m < n; m++) {for (int k = 0; k < n; k++) {if (a[m][k]!=0) {//x2、y2为该房屋的坐标int x2=m;int y2=k;sum+=Math.abs(x1-x2)+Math.abs(y1-y2);}}}b[c]=sum;c++;}}}//result为最短路径和int result=b[0];//先判断是否都为1if (count==n*n) {result=-1;}else {for (int i = 0; i < b.length; i++) {if ((b[i]<result)&&b[i]!=0) {result=b[i];}}}System.out.println(result);}
}

物流中转站---最短距离和相关推荐

  1. 牛客 OR175.物流中转站 --->超详细解答

    题目描述 题目描述 Shopee物流会有很多个中转站.在选址的过程中,会选择离用户最近的地方建一个物流中转站. 假设给你一个二维平面网格,每个格子是房子则为1,或者是空地则为0.找到一个空地修建一个物 ...

  2. [牛客/校招编程真题][C++]建物流中转站

    建物流中转站 题目描述 Shopee物流会有很多个中转站.在选址的过程中,会选择离用户最近的地方建一个物流中转站. 假设给你一个二维平面网格,每个格子是房子则为1,或者是空地则为0.找到一个空地修建一 ...

  3. 暴力--建物流中转站

    链接:https://www.nowcoder.com/questionTerminal/c82efaf9e2cc42cda0a8ad795845eceb?orderByHotValue=1& ...

  4. 暴力求解之中转站问题

    题目描述:  Shopee物流会有很多个中转站.在选址的过程中,会选择离用户最近的地方建一个物流中转站.假设给你一个二维平面网格,每个格子是房子则为1,或者是空地则为0.找到一个空地修建一个物流中转站 ...

  5. 每天一道算法题-暴力求解建物流中间站

    Shopee物流会有很多个中转站.在选址的过程中,会选择离用户最近的地方建一个物流中转站. 假设给你一个二维平面网格,每个格子是房子则为1,或者是空地则为0.找到一个空地修建一个物流中转站,使得这个物 ...

  6. 最短路径-图-----练习力扣787. K 站中转内最便宜的航班

    首先还是搞定三种最短路径的算法. 参考:https://www.cnblogs.com/Halburt/p/10756572.html https://www.cnblogs.com/tahitian ...

  7. 一份自己整理的不太详细的常见面试题

    1.java基础 1.解释下什么是面向对象?面向对象和面向过程的区别? ​ 面向对象是一种基于面向过程的编程思想,是面向现实世界模型的自然延申,这是一种"万物皆对象"的编程思想.由 ...

  8. 手写简易版Vue源码之数据响应化的实现

    当前,Vue和React已成为两大炙手可热的前端框架,这两个框架都算是业内一些最佳实践的集合体.其中,Vue最大的亮点和特色就是数据响应化,而React的特点则是单向数据流与jsx. 笔者近期正在研究 ...

  9. 跨境电商平台主要有哪些

    随着跨境电商的不断发展,跨境行业也日渐饱和,其中竞争力最大的就是亚马逊行业了,作为全球第一大电商,亚马逊在全球多个国家和地区开设了亚马逊站点,并且每天都有大量的用户访问亚马逊网站消费购物,这也就是为什 ...

最新文章

  1. linq where 数组_C#中LINQ与数据管道
  2. 只有汇编能告诉你为什么
  3. Crystal Report 2008
  4. Asp.net MVC 3实例学习之ExtShop(六)——登录对话框
  5. 所有科研人都应该收藏的论文下载网站,不是sci-hub!
  6. 【python基础知识】如何查看pycharm中已经安装的插件
  7. Spring官网下载dist.zip的几种方法
  8. python常用文本处理功能
  9. 基于 lumen 的微服务架构实践
  10. JSP自定义标签(2)
  11. C++折半查找的实现
  12. python中kmeans怎么导入数据集_通过Python实践K-means算法
  13. Json对象直接存取数据库
  14. 一个伤心人的帖和一群搞笑的跟帖
  15. 各行各业有对象系列之三:对象存储与银行
  16. android餐饮管理系统,餐饮管理软件,餐饮软件,美萍餐饮管理系统,酒店收银系统,饭店点菜系统,餐饮点单库存系统...
  17. MATLAB从入门到精通:MATLAB调色板,作图更酷炫
  18. Android:如何优雅的开发马甲包?
  19. Java 中的Date(获取一天的开始时间和结束时间)
  20. iS-RPA2022.1.0 | 艺赛旗RPA新版本正式发布

热门文章

  1. Python matplotlib玫瑰图
  2. 46-jQuert库的基本介绍
  3. 基于冯洛伊曼拓扑的鲸鱼算法用于滚动轴承的故障诊断研究(Matlab代码实现)
  4. 关于网线接法和测试器的亮灯顺序
  5. Cutterman插件安装及使用说明
  6. 安卓手机如何下载ZOOM?
  7. 专升本公共英语——常用动词搭配
  8. 用python写个桌面挂件 | 手把手带大家做只桌面宠物
  9. iOS每日一记------------之 中级完美大整理
  10. matlab legend用法