您的位置:首页 > 其它

南阳ACM7-街区最短路径问题

2013-11-12 12:18 281 查看
/*

街区最短路径问题

时间限制: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

*/

#include <iostream>

using namespace std;

#include <cstdlib>

const int N = 20;

int main()

{

// freopen("1.txt", "r", stdin);

int n, m, i, j;

int a
[2]={0};

cin>>n;

while(n--)

{

cin>>m;

int max1 = 0, max2 = 0;

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

{

cin>>a[i][0]>>a[i][1];

if (max1 < a[i][0])

max1 = a[i][0];

if (max2 < a[i][1])

max2 = a[i][1];

}

int dis1, dis2, sumdis, lessdis = 210200000;

for (i = 1; i <= max1; i++)

{

for (j = 1; j <= max2; j++)

{

dis1 = dis2 = 0;

for (int k = 0; k < m; k++)

{

dis1 += abs(i - a[k][0]);

dis2 += abs(j - a[k][1]);

}

sumdis = dis1 + dis2;

if (lessdis > sumdis)

lessdis = sumdis;

}

}

cout<<lessdis<<endl;

}

return 0;

}

作者:http://blog.csdn.net/lp310018931
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: