【分治法】邮局选址问题

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

 题目描述:

邮局选址问题

问题描述:

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


目录
相关文章
|
8月前
|
算法 定位技术
探寻最短路径之谜:Dijkstra算法详解
探寻最短路径之谜:Dijkstra算法详解
|
9月前
|
搜索推荐 算法 程序员
第五十五练 计数排序实现
第五十五练 计数排序实现
35 0
|
算法 决策智能
电动汽车充电站的最优选址和定容【两种方法】(Matlab代码实现)
电动汽车充电站的最优选址和定容【两种方法】(Matlab代码实现)
179 0
|
容器
最优贸易(记忆化搜索)
最优贸易(记忆化搜索)
76 1
|
算法
食物链问题(并查集)
食物链问题(并查集)
99 0
|
机器学习/深度学习 传感器 供应链
【优化选址】基于遗传算法实现发件中心-配送点-客户三级选址问题求解附matlab代码
【优化选址】基于遗传算法实现发件中心-配送点-客户三级选址问题求解附matlab代码
|
算法 定位技术
LeetCode:455. 分发饼干——贪心算法
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。 贪心算法是在每个阶段选取局部最优解,最终得到全局最优解的一种思想。贪心算法与动态规划的思路相似,但贪心算法要在每个阶段选择最优解,而这个最优解不一定是全局最优解,贪心算法在某些情况并不能得到全局最优解。
132 0
|
存储 算法
【趣学算法】贪心算法、海盗古董装船问题
贪心选择是指原问题的整体最优解可以通过一系列局部最优的选择得到,也就是先做出当前最优的选择,将原问题变为一个相似却规模更小的子问题,而后的每一步都是当前最优的选择。这种选择依赖于已做出的选择,但不依赖于未作出的选择。
|
机器学习/深度学习 资源调度 算法
【车间调度】基于改进帝国企鹅算法求解车间调度问题附matlab代码
【车间调度】基于改进帝国企鹅算法求解车间调度问题附matlab代码

热门文章

最新文章