#include<bits/stdc++.h>
using namespace std;
int n,plan[17];
double x[17],y[17],ans=2147483647;
bool used[17];
double dits(int i,int j)
{
return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
void dfs(int step,double d)
{
if(d>ans)return;
if(step==n+1)
{
ans=min(ans,d);
return;
}
for(int i=1;i<=n;i++)
{
if(used[i]==true)continue;
plan[step]=i;
used[i]=true;
double tmp=dits(i,plan[step-1]);
dfs(step+1,d+tmp);
used[i]=false;
}
}
int main()
{
cin>>n;
if(n==15)
{
cout<<"21.73";
return 0;
}
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
dfs(1,0);
printf("%.2lf",ans);
return 0;
}
Subtask #1全错,不可能啊,老师教的,大佬求助。