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
来源
经典题目
上传者
iphxer
 
直接枚举 计算出最短距离
View Code
 1  
 2 #include <iostream> 
 3 using namespace std;
 4 
 5 int ab(int x)
 6 {
 7     if (x>0)
 8     {
 9         return x;
10     }
11     return -x;
12 }
13 
14 int main()
15 {
16     int n;
17     cin>>n;
18     while (n--)
19     {
20         int m,j,k,i;
21         int a[20],b[20];
22         cin>>m;
23         for ( i=0;i<m;i++)
24         {
25             cin>>a[i]>>b[i];
26         }
27         int num=0,c[100000]={0};
28         for (i=1;i<100;i++)
29         {
30             for (j=1;j<100;j++)
31             {
32                 for (k=0;k<m;k++)
33                 {
34                     c[num]+=ab(i-a[k])+ab(j-b[k]);
35                 }
36                 num++;
37             }
38         }
39         int high2=c[0];
40         for (i=0;i<num;i++)
41         {
42             if (c[i]<high2)
43             {
44                 high2=c[i];
45             }
46         }
47         cout<<high2<<endl;
48     }
49     return 0;
50 }        

 

posted on 2012-08-13 20:25  不悔梦归处  阅读(521)  评论(0编辑  收藏  举报

导航