QAQ 所有的点都是联通的,跑一个最小生成树就行了啊。 但是为啥坐标数组不能开整型呢?求大神指点啊
#include <cstdio> #include <iostream> #include <cstring> #include <cmath> using namespace std; int f[9999]; double dx[9999],dy[9999]; double dis[5001]; double ff(int x,int y) { return sqrt((dx[x]-dx[y])*(dx[x]-dx[y])+(dy[x]-dy[y])*(dy[x]-dy[y])); } int main() { int n,m,t=0; double sum=0; scanf("%d",&n); memset(dis,0x7f,sizeof(dis)); for(int i=1;i<=n;i++) { int x,y,s; scanf("%lf%lf",&dx[i],&dy[i]); } dis[1]=0; for(int i=1;i<=n;i++) { int k=0; for(int j=1;j<=n;j++) if(f[j]==0&&dis[j]<dis[k]) k=j; sum+=dis[k]; f[k]=1; int x=0; for(int j=1;j<=n;j++) { double tmp=ff(k,j); if(f[j]==0&&tmp<dis[j]) dis[j]=tmp; } } printf("%.2lf",sum); return 0; }