【分治法】邮局选址问题

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

 题目描述:

邮局选址问题

问题描述:

  在一个按照东西和南北方向划分成规整街区的城市里,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


目录
相关文章
|
算法 决策智能
电动汽车充电站的最优选址和定容【两种方法】(Matlab代码实现)
电动汽车充电站的最优选址和定容【两种方法】(Matlab代码实现)
169 0
|
容器
最优贸易(记忆化搜索)
最优贸易(记忆化搜索)
71 1
|
算法
P5019 [NOIP2018 提高组] 铺设道路(贪心算法)
P5019 [NOIP2018 提高组] 铺设道路(贪心算法)
116 0
|
人工智能
【动态规划】守望者的逃离
【动态规划】守望者的逃离
102 0
|
人工智能 算法
贪心题:仓库选址
贪心题:仓库选址
100 0
|
机器学习/深度学习 传感器 供应链
【优化选址】基于遗传算法实现发件中心-配送点-客户三级选址问题求解附matlab代码
【优化选址】基于遗传算法实现发件中心-配送点-客户三级选址问题求解附matlab代码
|
人工智能 算法 容器
从六道leetcode题掌握双指针
双指针从广义上来说,是指用两个变量在线性结构上遍历而解决的问题。狭义上说, 对于数组,指两个变量在数组上相向移动解决的问题; 对于链表,指两个变量在链表上同向移动解决的问题,也称为「快慢指针」问题。 双指针算法通常不难,双指针算法是基于暴力解法的优化,它们是很好的学习算法的入门问题
|
存储 域名解析 缓存
计算机网络连环炮40问
计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。
349 0
|
算法
贪心算法——小船过河
贪心算法——小船过河
408 0
贪心算法——小船过河
|
机器学习/深度学习
进击的奶牛(二分)
题目描述 Farmer John 建造了一个有 NN(2≤ N ≤ 100000) 个隔间的牛棚,这些隔间分布在一条直线上,坐标是 x1,,,,xn(0≤xi≤1000000000)。
197 0