zoukankan      html  css  js  c++  java
  • 街区最短路径问题-ny-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、  求最短路径,可以把数据分成两组,一个东西街道,一个南北街道。

    2、  分别找两个数组的中位数。

    3、  每个数据到中位数的距离和,就是最短路径之和。

    程序代码:

    #include<stdio.h>

    #include<math.h>

    #include<stdlib.h>

    int cmp(const void *a,const void *b)

    {

        return *(int*)a - *(int*)b;

    }

    int main()

    {

        int x[110],y[110],n,m,i,j,s;

        while(scanf("%d",&n)!=EOF)

        {

            while(n--)

            {

                scanf("%d",&m);

                for(i=0;i<m;i++)

                {

                    scanf("%d %d",&x[i],&y[i]);

                }

                qsort(x,m,sizeof(x[0]),cmp);          // 排序

                qsort(y,m,sizeof(y[0]),cmp);

               // for(i=0; i<m;i++)

               // printf("%d ",x[i]);

               s=0;

               for(i=0; i<m;i++)

                s=s+fabs(x[i]-x[m/2])+fabs(y[i]-y[m/2]);               //找出中位数,然后到中位数的距离之和

                printf("%d ",s);

            }

        }

        return 0;

    }

  • 相关阅读:
    获取网络动态flash下载地址工具mark HA
    mac 下windows系统修改快捷键 HA
    CABasicAnimation HA
    喷墨和激光打印的不同点 HA
    HTML iphone HA
    html5 HA
    CastleMonoRail配置[webConfig]
    什么是MonoRail?[基础知识讲解]
    javascript常用函数
    CastleGlobalApplication.cs工程起始加载
  • 原文地址:https://www.cnblogs.com/zhouhongweihpu/p/3238643.html
Copyright © 2011-2022 走看看