用next_permutation做的
样例都过不了,我感觉时计算距离出了问题
//那些输出的无用的调试的时候用到的不用管
#include<stdio.h>
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<math.h>
using namespace std;
const int N=16;
struct point
{
double x,y;
}p[N];
bool cmp(point a,point b)
{
return a.x>b.x;
}
int n;
int main()
{
cin >> n;
for(int i=0;i<n;i++)
{
cin >> p[i].x >> p[i].y;
}
double minn=1000000;
int cm=0;
int cnt=0;
do{
double sum=0;
for(int i=1;i<n;i++)
{
sum+=sqrt(fabs((p[i].x-p[i-1].x)*(p[i].x-p[i-1].x))+fabs((p[i].y-p[i-1].y,2)*(p[i].y-p[i-1].y,2)));
}
if(sum<minn)
{
minn=sum;
cm=cnt;
}
cout << sum << endl;
for(int i=0;i<n;i++)
{
cout << p[i].x << " " << p[i].y << endl;
}
cout << endl;
cnt++;
}while(next_permutation(p,p+n,cmp));
cout << cm << " " <<minn;
return 0;
}