RT.
下面代码第 6 行,数据类型改成 long double 为什么最后输出的结果变成 0.00 。(别管原代码对不对先)
#include<bits/stdc++.h>
using namespace std;
int n;
int x[20],y[20];
double a[20][20],f[1<<16][17],ans=(1<<31)-1;
int main(){
scanf("%d",&n);
memset(f,127,sizeof(f));
cout<<ans<<" "<<f[1]<<" "<<f[2]<<" "<<f[3]<<endl;
for(int i=1;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
for(int j=0;j<=i;j++){
a[j][i]=a[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
cout<<a[i][j]<<" ";
}
cout<<endl;
f[1<<(i-1)][i]=a[0][i];
}
for(int i=2;i<(1<<n);i++){
for(int j=1;j<=n;j++){
if(i&(1<<(j-1))){
for(int k=1;k<=n;k++){
if((i&(1<<(k-1)))&&j!=k)f[i][j]=min(f[i][j],f[i-(1<<(k-1))][j]+a[j][k]);
}
}
}
}
for(int i=1;i<=n;i++)ans=min(ans,f[(1<<n)-1][i]);
printf("%.2f",ans);
return 0;
}
蟹蟹泥 qwq