注意这个最短路径只能是从红点沿着黑线走到蓝点!不可以穿越白色区域!
解题思路:求出x,y的中位点,然后把每个点到该点距离算出来,求和。
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define MAX 20
int x[MAX],y[MAX];
int main()
{
int T;
cin>>T;
while(T--)
{
int m_x,m_y;
int sum=0;
int m,i;
cin>>m;
for(i=0;i<m;i++)
cin>>x[i]>>y[i];
sort(x,x+m);
sort(y,y+m);
//for(i=0;i<m;i++)
// {
// sum+=abs(x[i]-x[m/2])+abs(y[i]-y[m/2]);//一般想法,把各个点到中位点的距离加起来。
// }
for(i=0;i<m/2;i++) //(更优程序)注意不要包括中间点!,因为最后某一个点到前面对应一点的话,就会经过中间点!
{
sum+=x[m-1-i]-x[i]+y[m-1-i]-y[i];//思想:与其求各个点到中点距离,不如减少一半计算量,后一点减相应前一点!
}
cout<<sum<<endl;
}
return 0;
}