洛谷P1433 吃奶酪

#include<iostream>
#include<math.h>
using namespace std ;
const int N=1001;
int n;
bool st[N];
double x[N];
double y[N];
double dis[N][N];
double ans=123123123.0;
void dfs(int step,int now,double len)
//step为走的步数,now为此时的点,len为长度
{
    if(len>ans) return ;
    if(step==n) {
        ans=min(ans,len);
        return ;
    }
    for(int i=1; i<=n; i++)
        if(!st[i]) {
            st[i]=1;
            dfs(step+1,i,len+dis[now][i]);
            st[i]=0;
        }
}
int main() {
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>x[i]>>y[i];
    x[0]=y[0]=0;
    for(int i=0; i<=n; i++)
        for(int j=0; j<=n; j++)
            dis[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
    dfs(0,0,0.0);
    printf("%.2f",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/QingyuYYYYY/p/11915045.html