街区最短路径问题
来源:互联网 发布:请个部门悉知还是知悉 编辑:程序博客网 时间:2024/04/29 06:48
住户只可以沿着街道行走。
各个街道之间的间隔相等。
用(x,y)来表示住户坐在的街区。
例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。
现在要建一个邮局,使得各个住户到邮局的距离之和最少。
求现在这个邮局应该建在那个地方使得所有住户距离之和最小;
输入
- 第一行一个整数n<20,表示有n组测试数据,下面是n组数据;
每组第一行一个整数m<20,表示本组有m个住户,下面的m行每行有两个整数0<x,y<100,表示某个用户所在街区的坐标。
m行后是新一组的数据; - 输出
- 每组数据输出到邮局最小的距离和,回车结束;解题思路:假设邮局坐标(a,b) 住户与邮局的距离 就是曼哈顿距离 |x-a|+|y-b|总的就变成 各住户的x坐标 邮局a坐标 |x1-a|+|x2-a|.... +|y1-b|+|y2-b|...+|yn-b|问题就变分解成 x、y标轴 x1 、x2.。xn 与a差的总和最小值a 假设 位于 xm<a<Xn|x1-a|+|x2-a|+..+|xn-a| = (a-x1)+(a-x2)+..+(a-xm)+..+(xn-a)a 为x1、x2。。xn 最中间数x 时候 总和最小(推理证明后补充)
#include <iostream>#include <algorithm>#include <vector>using namespace std;int main(){int n; cin >> n;while(n--){ int m;cin>>m; vector<int> xBuf; vector<int> yBuf;for(int i=0;i<m;i++) { int data; cin >> data; xBuf.push_back(data); cin >> data; yBuf.push_back(data); }sort(xBuf.begin(),xBuf.end());sort(yBuf.begin(),yBuf.end());long sum=0;for(int i=0;i<m/2;i++)sum+=xBuf[m-1-i]-xBuf[i]+yBuf[m-1-i]-yBuf[i];cout<<sum<<endl;}return 0;}
0 0
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 街区最短路径问题
- 堆栈桢的生成原理
- C语言:const的用法
- 为HBASE构建辅助索引
- ARM寄存器总结:
- JDK自动拆箱下,三目运算符的潜规则
- 街区最短路径问题
- 在基于or1200处理器的SoC上移植linux
- spring aop
- [LeetCode127]Word Ladder
- listview加载效率
- 步进电机原理和驱动
- 对象模型的细节
- 利用ActionListener接口,让当前类自身做监听器
- HDU 1788——Chinese remainder theorem again