NYOJ-7街区最短问题
街区最短路径问题
时间限制: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街区最短问题相关推荐
- nyoj7——街区最短问题
描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相等. 用(x,y)来表示住户坐在的街区. 例如(4,20),表示用户在东西方向第4个街道, ...
- NYOJ 7 街区最短路径问题
街区最短路径问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相 ...
- nyoj 7 街区最短路径问题 暴力枚举
街区最短路径问题 , 题目链接 , 点在这里. 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向.住户只可以沿着街道行走 ...
- nyoj 7 街区最短路径问题 (曼哈顿距离(出租车几何) or 暴力)
街区最短路径问题 时间限制: 3000 ms | 内存限制:65535 KB 难度: 4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间 ...
- nyoj 7街区最短路径问题(暴力 || 哈曼顿距离)
街区最短路径问题 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的 ...
- C库函数qsort七种使用方法示例
这篇文章是 一楼那个学长写的 C库函数qsort七种使用方法示例 七种qsort排序方法<本文中排序都是采用的从小到大排序> 一.对int类型数组排序 C++代码 int num[10 ...
- 面试总结+网上查阅的智力题
笔试了这么多家公司,每次笔试都过了,可是总是死在面试上,总结了很多原因: 1.其中有很多问题是随机性的,没有做好准备,所以要学会随机应变的能力,嘴比较笨,还是多学学良好的沟通,学会与人交流,应变的能力 ...
- Python访问街区10个点,并俩俩绘制一条线,得到5条线,求最短的距离和?
Python访问街区10个点,并俩俩绘制一条线,得到5条线,求最短的距离和? 1. 效果图 2. 源码 参考 上一篇博客介绍了Python访问街区所有节点最短路径问题,并结合matplotlib可视化 ...
- NYOJ——街区最短路径问题
街区最短路径问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间隔相 ...
最新文章
- Django框架之初识
- shell中cut-b_Shell中cut用法
- arcgis怎么运行python_在arcgis上用python脚本(arcpy)做数据批处理
- SAP系统中的银行主数据FI12
- 七夕过后,你分析过自己单身原因的原因吗?
- 上传文件input(type=file)美化。
- Linux Shell基础 - 流程控制 - for循环 - while 循环 - until循环
- 2.0版本中如何取得当前的控制器和方法
- Cocos2d-x schedulers 定时器
- Java字符串排序(根据字节及字符长度进行排序)
- MOS管的源极和漏极的区别
- 基于Python的FreeCAD二次开发
- 【洛谷】P1427 小鱼的数字游戏
- C#连接服务器超时解决方法
- Python常用开发软件有哪些?
- 触摸屏和显示屏参考文献
- 窗口看门狗和独立看门狗区别
- SpringBoot-自动配置
- adb 打开 diag 端口用qpst备份恢复qcn
- 计算机英语中协议英语,计算机英语