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