深搜 90 求优化 TT
#include<iostream>
#include<cmath>
using namespace std;
double min_value=100000.0;
int n;
double a[15][2];
bool vis[15];
bool f=false;
bool isOk(){
bool flage=true;
for(int i=0;i<n;i++){
if(!vis[i]){
flage=false;
}
}
return flage;
}
void dfs(double x,double y,double distance){
if(f){
return;
}
if(distance>min_value){
return;
}
if(isOk()){
f=true;
if(min_value>distance){
min_value=distance;
}
return;
}
for(int i=0;i<n;i++){
if(!vis[i]){
vis[i]=true;
double xx=(x-a[i][0])*(x-a[i][0]);
double yy=(y-a[i][1])*(y-a[i][1]);
double distance_tmp=distance+sqrt(xx+yy);
dfs(a[i][0],a[i][1],distance_tmp);
vis[i]=false;
f=false;
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<2;j++){
cin>>a[i][j];
}
}
dfs(0,0,0.0);
printf("%.2f",min_value);
return 0;
}