#include<iostream> #include<string.h> #include<stdio.h> #include<math.h> using namespace std; #define maxn 105 #define MM 1000000000 int n,T; struct aa { double x; double y; }aa[maxn]; double sum; int v[maxn]; double w[maxn][maxn]; double d[maxn]; void prim() { memset(v,0,sizeof(v)); v[1]=1; for(int i=1;i<=n;i++) d[i]=w[i][1]; for(int i=1;i<=n;i++) { int x=0; double mm=MM; for(int j=2;j<=n;j++) if(d[j]<mm && !v[j]) mm=d[x=j]; v[x]=1; if(x) sum+=mm; for(int j=2;j<=n;j++) if(d[j]>w[x][j] && x!=j) d[j]=w[x][j]; } } int main() { scanf("%d",&T); while(T--) { scanf("%d",&n); { sum=0; for(int i=1;i<=n;i++) scanf("%lf%lf",&aa[i].x,&aa[i].y); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) w[i][j]=sqrt((aa[i].x-aa[j].x)*(aa[i].x-aa[j].x)+(aa[i].y-aa[j].y)*(aa[i].y-aa[j].y)); prim(); if(jj<T) printf("%.2f\n\n",sum); else printf("%.2f\n",sum); } } return 0; } /* 3 3 1.0 1.0 2.0 2.0 2.0 5.0 */
最近在做图论中的最小生成树和最短路,欢迎交流指点~
Uva 10034 - Freckles
最新推荐文章于 2015-12-09 21:53:31 发布
