用的dfs+剪枝,然后超时```
#include <bits/stdc++.h>
using namespace std;
int n;
double dx[21],dy[21];
int ct;
double dis=0x3f3f3f3f;
bool vis[21];
double ans;
void dfs(double x,double y,double s){
if(s>dis)
return;
if(ct==n){
dis=min(dis,s);
return;
}
for(int i=0;i<n;i++){
if(!vis[i]){
vis[i]=1;
ct++;
ans=sqrt((dx[i]-x)*(dx[i]-x)+(dy[i]-y)*(dy[i]-y));
dfs(dx[i],dy[i],s+ans);
vis[i]=0;
ct--;
}
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%lf%lf",&dx[i],&dy[i]);
dfs(0,0,0);
printf("%.2f",dis);
}