【分治法】邮局选址问题

简介: 【分治法】邮局选址问题

 题目描述:

邮局选址问题

问题描述:

  在一个按照东西和南北方向划分成规整街区的城市里,n 个居民点散乱地分布在不同的街区中。用x 坐标表示东西向,用y 坐标表示南北向。各居民点的位置可以由坐标(x,y) 表示。街区中任意2 点(x1,y1) 和(x2,y2) 之间的距离可以用数值|x1-x2|+|y1-y2| 度量。

居民们希望在城市中选择建立邮局的最佳位置,使n 个居民点到邮局的距离总和最小。

编程任务:

  给定n 个居民点的位置,编程计算n 个居民点到邮局的距离总和的最小值。

数据输入:

  由文件input.txt 提供输入数据。文件的第1 行是居民点数n,1<=n<=10000。接下来n 行是居民点的位置,每行2 个整数x 和y,-10000<=x,y<=10000。

结果输出:

  程序运行结束时,将计算结果输出到文件output.txt 中。文件的第1 行中的数是n 个居民点到邮局的距离总和的最小值。

输入文件示例               输出文件示例

input.txt                  output.txt

5                          10

1 2

2 2

1 3

3 -2

3 3

思路分析:

image.gif编辑

代码如下:

#include <iostream>
#include <algorithm>//sort()函数头文件 
using namespace std;
#define N 10000
bool cmp(int a,int b){
    return a<b;
}
int main()
{
    int n;cin>>n;
    int X=0, Y=0;//(X,Y)记录邮局位置
    int MinDis=0;
    int x[N],y[N];
    for(int i=0;i<n;i++){
        cin>>x[i]>>y[i];
    }
  //街区中任意2 点(x1,y1) 和(x2,y2) 之间的距离可以用数值|x1-x2|+|y1-y2| 度量。
  //所以可将x,y分开计算 
    sort(x,x+n,cmp);//排序 
    sort(y,y+n,cmp);//排序 
    X=x[n/2];Y=y[n/2];
    //下图有解释,为何取[n/2],以及坐标数为奇/偶数此取值皆满足 
  //邮局位置找法思想,两边之和大于第三边,x取值必须在以两点为一组,在其连线上 
    for(int i=0;i<n;i++){
        int dis1=x[i]-X;int dis2=y[i]-Y;
        if(dis1<0) dis1=-1*dis1;//距离为正值,若作差为负数,则取相反数 
        if(dis2<0) dis2=-1*dis2;//距离为正值,若作差为负数,则取相反数 
        MinDis=MinDis+dis1+dis2;//求和 
    }
    cout<<MinDis<<endl;
    return 0;
}

image.gif


目录
相关文章
|
7月前
【错题集-编程题】空调遥控(二分 / 滑动窗口)
【错题集-编程题】空调遥控(二分 / 滑动窗口)
|
7月前
|
算法 测试技术 C#
【线段树】【前缀和】:1687从仓库到码头运输箱子
【线段树】【前缀和】:1687从仓库到码头运输箱子
|
存储 算法 前端开发
前端算法-加油站
前端算法-加油站
|
机器学习/深度学习 传感器 供应链
【优化选址】基于遗传算法实现发件中心-配送点-客户三级选址问题求解附matlab代码
【优化选址】基于遗传算法实现发件中心-配送点-客户三级选址问题求解附matlab代码
|
机器学习/深度学习 传感器 算法
【有序充电】基于蒙特卡诺和拉格朗日乘子法模拟电动车有序和无序充电附matlab代码
【有序充电】基于蒙特卡诺和拉格朗日乘子法模拟电动车有序和无序充电附matlab代码
|
存储 算法
【趣学算法】贪心算法、海盗古董装船问题
贪心选择是指原问题的整体最优解可以通过一系列局部最优的选择得到,也就是先做出当前最优的选择,将原问题变为一个相似却规模更小的子问题,而后的每一步都是当前最优的选择。这种选择依赖于已做出的选择,但不依赖于未作出的选择。
|
算法
算法竞赛百日——快速排序 - 分治
算法竞赛百日——快速排序 - 分治
算法竞赛百日——快速排序 - 分治
|
算法
贪心算法——小船过河
贪心算法——小船过河
391 0
贪心算法——小船过河
【每日一题Day47】LC1687从仓库到码头运输箱子 | 动态规划
思路:首先我们要尽可能在一趟行程中搬运更多的箱子,一趟行程可以搬运的最多箱子由箱子的个数、箱子的重量以及箱子的目的地决定
105 0
|
存储 算法
从小卖部批发辣条到算法复杂度分析
从小卖部批发辣条到算法复杂度分析
150 0
从小卖部批发辣条到算法复杂度分析