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; }