建物流中转站

题目描述
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。


思路:
穷举法。

  1. 使用unordered_multimap记录房子的位置。
  2. 遍历栅格,计算最小距离,并且记录该栅格的状态(房子,空地)。
  3. 特殊情况,某两个位置距离相等,但是1个是房子,1个是空地,此时是可以修建的。

代码:

#include<iostream>
#include<vector>
#include<unordered_map> //unordered_multimap
#include<limits.h>  //INT_MAXusing namespace std;vector<vector<int>> nums(1005,vector<int>(1005,0));    int main()
{unordered_multimap<int,int> house;int N;cin>>N;for(int i=0;i<N;i++){for(int j=0;j<N;j++){cin>>nums[i][j];if(nums[i][j])house.insert(make_pair(i,j));  //记录房子位置}           }        /int min_dist = INT_MAX;int type=1;for(int i=0;i<N;i++){for(int j=0;j<N;j++){           int tmp_dist=0;for(unordered_map<int,int>::iterator it=house.begin();it!=house.end();it++){tmp_dist+=abs(i-it->first)+abs(j-it->second);}if(min_dist > tmp_dist || (min_dist == tmp_dist && nums[i][j]==0) ){min_dist=tmp_dist;type=nums[i][j];}}}if(type)cout<<-1<<endl;elsecout<<min_dist<<endl;return 0;}

结果:

[牛客/校招编程真题][C++]建物流中转站相关推荐

  1. 牛客 美团编程真题 MT1 最大差值 基础贪心 蓝书上的例题

    题目描述 有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值. 给定数组A及它的大小n,请返回最大差值. 测试样例: [10,5],2 返回:0 这题原题是蓝书上的例题 蓝书 ...

  2. 牛客网笔试真题 2021 阿里巴巴编程题(4星)题解(1-5)

    2021阿里巴巴校招笔试真题_Java工程师.C++工程师_牛客网 1.小强现在有n个物品,每个物品有x,y两种属性和.他想要从中挑出尽可能多的物品满足以下条件:对于任意两个物品 i 和 j ,满足( ...

  3. 牛客 哔哩哔哩校招编程真题 给定一个整数数组,判断其中是否有3个数和为N 二分经典 三数之和

    题目描述 给定一个整数数组,判断其中是否有3个数和为N 输入描述: 输入为一行 逗号前为一个整数数组,每个元素间用空格隔开:逗号后为N 输出描述: 输出bool值 True表示存在3个和为N的数 Fa ...

  4. 【牛客网-公司真题-前端入门篇】——58同城2021校招笔试-前端

  5. 牛客JS编程大题(一)

    1.找出元素 item 在给定数组 arr 中的位置 function indexOf(arr,item){ return arr.indexOf(item); } 2.计算给定数组 arr 中所有元 ...

  6. 【牛客网-公司真题-前端入门篇】——小米秋招笔试-前端

  7. 【牛客网-公司真题-前端入门篇】——奇安信秋招笔试-前端-卷1

  8. 【牛客网-公司真题-前端入门篇】——奇安信春招笔试-前端-卷2

  9. shopee的零食柜-动态规划-校招编程真题

    题目描述 shopee的零食柜,有着各式各样的零食,但是因为贪吃,小虾同学体重日益增加,终于被人叫为小胖了,他终于下定决心减肥了,他决定每天晚上去操场跑两圈,但是跑步太累人了,他想转移注意力,忘记痛苦 ...

最新文章

  1. SAP WM 能否使用LT12去确认一个需要2-step法确认的TO单?
  2. python3 for mac_PyCharm for Mac-PyCharm Mac版下载 V2018.3.2-PC6苹果网
  3. 记录一个超分辨率算法项目,来自B站
  4. Spring RabbitMQ使用
  5. 昆明学院计算机二级报名时间,2017年3月昆明学院计算机等级考试报名时间(云南)...
  6. Hibernate学习笔记(一)
  7. UOJ Test Round 3
  8. python字母频率_科学网-Python统计字母频数和频率-吕波的博文
  9. 【转载】架构师速成-如何高效编程
  10. 好吧,你说简单就简单,但简单的事,不要变成本能,要常思常变
  11. python聊天机器人
  12. Javascript从零开始学习第一天
  13. 使用ConcurrentDictionary实现轻量缓存
  14. 从 CCNA 到 CCIE
  15. Keil5下载芯片包并导入教程
  16. 2021年创新医疗器械盘点
  17. 西门子定位器6DR5010-0NN00-0AA0
  18. php 图片上加文字,PHP实现在图片中添加中文文字
  19. Excel如何取消合并单元格并填充空单元格
  20. tp路由服务器无响应,路由器无法PPPOE链接上网老显示服务器无响应

热门文章

  1. 测试知识详解(一)黑盒白盒测试
  2. [OpenGL ES 01]OpenGL ES之初体验
  3. android芝麻认证sdk,芝麻认证
  4. pyqt5在图像上绘制矩形框
  5. python聚宽量化_Python量化交易之四_聚宽数据
  6. EmEditor注册码及EmEditor注册机下载
  7. SMR硬盘 Linux 环境下ext4的优化
  8. Qt浅谈之十七:飞舞的蝴蝶(GraphicsView框架)
  9. APM for .NET评测系列:OneAPM vs SCOM
  10. UML——概述(什么是UML?UML有什么作用?面向对象技术)