我写的BFS感觉比较玄学......
6个点WA,求调:
#include<bits/stdc++.h>
using namespace std;
#define RI register int
#define ll long long
#define MAXN 17
#define LN 1<<MAXN
int n;
struct node{
int op;
int c;
};
queue <node> que;
double f[MAXN][MAXN];
int p[MAXN][2];
double dp[LN];
node w;
int main(){
scanf("%d",&n);
for(RI i=1;i<=n;i++)
scanf("%d%d",&p[i][0],&p[i][1]);
p[0][0]=0,p[0][1]=0;
for(RI i=0;i<=n;i++)
for(RI j=0;j<=n;j++)
if(f[i][j]==0&&i!=j){
f[i][j]=sqrt((p[i][0]-p[j][0])*(p[i][0]-p[j][0])+(p[i][1]-p[j][1])*(p[i][1]-p[j][1]));
f[j][i]=f[i][j];
}
que.push((node){0,1});
n++;
for(RI i=0;i<=LN;i++)
dp[i]=1e10;
dp[1]=0.000000;
while(!que.empty()){
w=que.front();
que.pop();
for(RI i=1;i<=n;i++)
if(!(w.c&(1<<i)))
if(dp[w.c]+f[w.op][i]<dp[w.c|(1<<i)]){
dp[w.c|(1<<i)]=dp[w.c]+f[w.op][i];
que.push((node){i,w.c|(1<<i)});
}
}
printf("%0.2lf",dp[(1<<n)-1]);
return 0;
}
答案:17.15
我的输出:16.74
码风偏丑,见谅QwQ