zoukankan      html  css  js  c++  java
  • 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
    题解,邮局并不一定在居民点上,这个要注意,刚开始没理解好题意,以为是坐标点的距离。。。。
    代码:
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 const int MAXN=25;
     4 int cmp(const void *a,const void *b){
     5     if(*(int *)a<*(int *)b)return -1;
     6     else return 1;
     7 }
     8 int x[MAXN],y[MAXN];
     9 int main(){
    10     int T,n;
    11     scanf("%d",&T);
    12     while(T--){
    13         scanf("%d",&n);
    14         for(int i=0;i<n;i++)
    15             scanf("%d%d",x+i,y+i);
    16         qsort(x,n,sizeof(x[0]),cmp);
    17         qsort(y,n,sizeof(y[0]),cmp);//此时邮局建立的点应为x[n/2],y[n/2]; 
    18         int sum=0;
    19         for(int i=0;i<n/2;i++){
    20             sum+=x[n-1-i]-x[i]+y[n-1-i]-y[i];//x[i]和x[n-1-i]到x[n/2]距离和相当于x[i]到x[n-1-i]点的距离 ,画个区间就看出来了 
    21             //sum应加上所有点到x[n/2]的距离; 
    22         }
    23         printf("%d
    ",sum);
    24     }
    25     return 0;
    26 }
  • 相关阅读:
    遍历及线索化二叉树
    二叉树
    程序的内存布局
    C语言一些易混淆的概念
    C语言标准库函数memcpy和memmove的区别以及内存重叠问题处理
    柔性数组
    一个基于QT简单登录对话框(带验证码功能)
    Qt中的布局管理器
    Qt中的标准对话框
    一个基于QT简单登录对话框
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4835156.html
Copyright © 2011-2022 走看看