邮局选址问题c语言实验报告,邮局选址问题 (C语言代码)

解题思路:因题目的距离公式为:[x1-x2]+[y1-y2]。可以知道,我们可以将居民点的横纵坐标分别分成

排序好的两个数组。拿x的数组来说,求出x1~xn中的一点,这个点满足各点到这点的距离之和最小

不难发现这个点就是Xn/2。这点也就是邮局选址的横坐标。

他是c++写的

注意事项:

参考代码:#include

#include

int main()

{

int n,a,b,i,j,k=0,sum=0,x[10000],y[10000];

scanf("%d",&n);

for(i=0;i

{

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

}

for(i=0;i

{

for(j=i+1;j

{

if(x[i]>x[j])

{

k=x[i];

x[i]=x[j];

x[j]=k;

}

if(y[i]>y[j])

{

k=y[i];

y[i]=y[j];

y[j]=k;

}

}

}

a=x[n/2];

b=y[n/2];

for(i=0;i

{

sum+=fabs(a-x[i]);

sum+=fabs(b-y[i]);

}

printf("%d\n",sum);

return 0;

}