理论:
注意曼哈顿距离问题必须遵循正南,正北,正东,正西方向分布格局,并且路线也必须是如此。
那么我们无论怎么走,只要在两点中间取任意一个点作为中转点,都可以使其距离等于fabs(x1-x2)+fabs(y1-y2)
那么推出对于多个点的问题,我们要使其距离最短,就只将点进行x,y的分别排序,找到一个对于最大,最小, (次大,次小)依次类推,的,x,y都可以在二者之间的一个点。
思路:
x,y排序,即可.
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;
int x[105];
int y[105];
int main()
{
int n,m;
cin>>m;
for(int k=1;k<=m;k++)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
sort(x+1,x+1+n);
sort(y+1,y+1+n);
int a,b;
a=x[(n+1)/2];
b=y[(n+1)/2];
int sum=0;
for(int i=1;i<=n;i++)
{
sum+=fabs(x[i]-a)+fabs(y[i]-b);
}
cout<<sum<<endl;
}
return 0;
}