#include<iostream> #include<algorithm> #include<cstring> #include<cmath> using namespace std ; const int N = 16 ; double f[1<<N][21] ;//表示走到i种状态,并且最后一步在j上 int x[21], y[21] ; double d (int a ,int b ){ return sqrt((x[a] - x[b]) * (x[a] - x[b])+(y[a] - y[b]) * (y[a] - y[b])) ; } int main(){ int n ; cin >> n ; memset(f,0127,sizeof(f)) ; x[0] = 0 , y[0] = 0 ; for(int i = 1 ; i<= n ; i ++) cin >> x[i] >> y[i] ; n ++ ; f[1][0] = 0 ; for(int s = 1 ;s < 1 << n ; s++){ for(int j = 0 ; j < n ; j ++){ for(int k = 0 ; k < n ; k ++){ if(((s>>j) & 1) && ((s^(1<<j)) >> k & 1)){ f[s][j] = min(f[s][j] , f[s^(1<<j)][k] + d(k,j) ) ; } } } } double res = f[(1<<n)-1][0] ; for(int i = 1 ; i < n ; i ++){ double p = f[(1<<n)-1][i] ; if(res > p) res = p ; } printf("%.2lf", res); }