标签:
Eddy‘s pictureeddy
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int inf=0x3fffffff; double cost[107][107]; double ans; int n; struct node { double x,y; }; node e[10007]; bool used[107]; double dis[107]; void prim() { for(int i=1;i<=n;i++) { dis[i]=inf; used[i]=0; } dis[1]=0; while(1){ int v=-1; for(int i=1;i<=n;i++) { if(!used[i]&&(v==-1||dis[i]<dis[v])) v=i; } if(v==-1) break; used[v]=1; for(int i=1;i<=n;i++) { if(!used[i]) dis[i]=min(dis[i],cost[v][i]); } } // for(int i=1;i<=n;i++) // printf("%.2lf ",dis[i]); } int main() { //freopen("in.txt","r",stdin); while(~scanf("%d",&n)){ memset(e,0,sizeof(e)); for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) if(j==i) cost[i][j]=0; else cost[i][j]=inf; for(int i=1;i<=n;i++) scanf("%lf%lf",&e[i].x,&e[i].y); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { cost[i][j]=cost[j][i]=sqrt((e[i].x-e[j].x)*(e[i].x-e[j].x)+(e[i].y-e[j].y)*(e[i].y-e[j].y)); } prim(); ans=inf; double sum=0; for(int i=1;i<=n;i++) { sum+=dis[i]; } printf("%.2lf\n",sum); } return 0; }
标签:
原文地址:http://blog.csdn.net/yuanchang_best/article/details/43163717