街区最短路径问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:4

描述

一个街区有很多住户,街区的街道只能为东西、南北两种方向。住户只可以沿着街道行走。各个街道之间的间隔相等。    用(x,y)来表示住户坐在的街区。例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。现在要建一个邮局,使得各个住户到邮局的距离之和最少。求现在这个邮局应该建在那个地方使得所有住户距离之和最小;

输入

第一行一个整数n<20,表示有n组测试数据,下面是n组数据;
每组第一行一个整数m<20,表示本组有m个住户,下面的m行每行有两个整数0<x,y<100,表示某个用户所在街区的坐标。
m行后是新一组的数据;

输出

每组数据输出到邮局最小的距离和,回车结束;

样例输入

2
3
1 1
2 1
1 2
5
2 9
5 20
11 9
1 1
1 20

样例输出

2
44

由于测试数据比较弱,刚开始直接暴力也能过。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
typedef struct node
{int x,y;
}point;
const int inf = 0x3f3f3f3f;
const int maxn=105;
int m;
vector<point> ve;
void init()
{ve.clear();cin>>m;int x,y;for(int i=0;i<m;i++){cin>>x>>y;point temp={y,x};ve.push_back(temp);}
}
int solve()
{int ans=inf,sum;for(int i=1;i<100;i++){for(int j=1;j<100;j++){sum=0;for(int k=0;k<ve.size();k++){sum+=(abs(ve[k].x-i)+abs(ve[k].y-j));}ans=min(ans,sum);}}return ans;
}
int main()
{int t;cin>>t;while(t--){init();cout<<solve()<<endl;}return 0;
}

法二:数学:在一维的数轴上,一点x到数轴上多点的距离和最小 = a[max]-a[0]+a[max-1]-a[0+1]+….直到max-n<=0+n;

/*此题为数学类问题,目的是为了找一个点,使这个点到每条边的距离最短,本题中,可以用一个简单地思路,分别把坐标x,y,分开,那么这道题就简化为:在给定的m个点中,求每个点到x的距离的和的最小值,即:min{∑|xi-x|},故本题的结果应该是:距离=min{∑|xi-x|}+min{∑|yi-y|}。为了是问题更简化,可以先将x坐标y坐标分别按升序排序,然后用最后一个数减去第一个,倒数第二个减去正数第二个......以此类推。(这样做的原因是,想要找出一点,使该点到两个端点的距离的和最小,则这个点必落在两个端点之间。)
*/
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int x[20],y[20];
int main()
{int t;cin>>t;while(t--){int m;cin>>m;for(int i=0;i<m;i++)cin>>x[i]>>y[i];sort(x,x+m);sort(y,y+m);int ans=0;for(int i=m-1,j=0;i>j;i--,j++) //到 x点和的最短距离。ans+=(x[i]-x[j]+y[i]-y[j]);cout<<ans<<endl;}return 0;
}

NYOJ-7街区最短问题相关推荐

  1. nyoj7——街区最短问题

    描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相等. 用(x,y)来表示住户坐在的街区. 例如(4,20),表示用户在东西方向第4个街道, ...

  2. NYOJ 7 街区最短路径问题

    街区最短路径问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相 ...

  3. nyoj 7 街区最短路径问题 暴力枚举

    街区最短路径问题 , 题目链接 , 点在这里. 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向.住户只可以沿着街道行走 ...

  4. nyoj 7 街区最短路径问题 (曼哈顿距离(出租车几何) or 暴力)

    街区最短路径问题 时间限制: 3000 ms  |  内存限制:65535 KB 难度: 4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间 ...

  5. nyoj 7街区最短路径问题(暴力 || 哈曼顿距离)

    街区最短路径问题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的 ...

  6. C库函数qsort七种使用方法示例

    这篇文章是  一楼那个学长写的  C库函数qsort七种使用方法示例 七种qsort排序方法<本文中排序都是采用的从小到大排序> 一.对int类型数组排序 C++代码 int num[10 ...

  7. 面试总结+网上查阅的智力题

    笔试了这么多家公司,每次笔试都过了,可是总是死在面试上,总结了很多原因: 1.其中有很多问题是随机性的,没有做好准备,所以要学会随机应变的能力,嘴比较笨,还是多学学良好的沟通,学会与人交流,应变的能力 ...

  8. Python访问街区10个点,并俩俩绘制一条线,得到5条线,求最短的距离和?

    Python访问街区10个点,并俩俩绘制一条线,得到5条线,求最短的距离和? 1. 效果图 2. 源码 参考 上一篇博客介绍了Python访问街区所有节点最短路径问题,并结合matplotlib可视化 ...

  9. NYOJ——街区最短路径问题

    街区最短路径问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相 ...

最新文章

  1. Django框架之初识
  2. shell中cut-b_Shell中cut用法
  3. arcgis怎么运行python_在arcgis上用python脚本(arcpy)做数据批处理
  4. SAP系统中的银行主数据FI12
  5. 七夕过后,你分析过自己单身原因的原因吗?
  6. 上传文件input(type=file)美化。
  7. Linux Shell基础 - 流程控制 - for循环 - while 循环 - until循环
  8. 2.0版本中如何取得当前的控制器和方法
  9. Cocos2d-x schedulers 定时器
  10. Java字符串排序(根据字节及字符长度进行排序)
  11. MOS管的源极和漏极的区别
  12. 基于Python的FreeCAD二次开发
  13. 【洛谷】P1427 小鱼的数字游戏
  14. C#连接服务器超时解决方法
  15. Python常用开发软件有哪些?
  16. 触摸屏和显示屏参考文献
  17. 窗口看门狗和独立看门狗区别
  18. SpringBoot-自动配置
  19. adb 打开 diag 端口用qpst备份恢复qcn
  20. 计算机英语中协议英语,计算机英语

热门文章

  1. 全球与中国越野滑雪装备市场深度研究分析报告
  2. 学习python实现问卷星自动填写问卷
  3. 动画:链表快慢指针解题技巧
  4. BTS、Steem、EOS 背后的石墨烯技术
  5. linux删除内网ip,Linux centOS有2个内网IP地址的原因
  6. 使用python给图片加个盲水印
  7. 判断是否为完全二叉树(两种方法)
  8. jquery设置网页背景图片
  9. 新手python笔记之安装pip升级问题
  10. 【Unity/Tutorial】官方AircraftJetAI(四)喷射机首飞