P1433 吃奶酪

链接:P1433

---------------------------------------------------------------

一道很水的搜索题,唯一的难点就是预处理,不过公式都写出来了也没什么难的

坑点还是有的,比如说有一个(两个点)的坐标都是一堆小数,就会wa掉

再也没什么难的了

----------------------------------------------------------------

#include<iostream>
#include<cmath>
#include<cstdio>
#include<windows.h>
using namespace std;
int vis[100];
int n;
double dis[30][30];
double x[30];
double y[30];
double ans=1000090;
char c;
void dfs(int p,double diss,int cnt){
    if(diss>ans)
    return ;
    if(vis[p])
    return ;
    if(cnt==n){
        ans=min(ans,diss);
        return ;
    }
    vis[p]=1;
    for(int i=1;i<=n;++i)
    {
        if(!vis[i])
        dfs(i,diss+dis[p][i],cnt+1);
    }
    vis[p]=0;
    return ;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;++i)
    scanf("%lf%lf",&x[i],&y[i]);
    x[0]=y[0]=0;
    for(int i=0;i<=n;++i)
        for(int j=i+1;j<=n;++j)
        {
            dis[i][j]=dis[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
        }
    dfs(0,0,0);
    printf("%.2lf",ans);
    system("pause");
    return 0;
}
Ac
原文地址:https://www.cnblogs.com/For-Miku/p/11376498.html