首页 > 代码库 > UVA 10369 Arctic Network
UVA 10369 Arctic Network
题目来源:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1310
最小生成树问题,Prim算法在这种给出坐标的情况相对Kruskal算法优势还是很大。
1 /*AC 19ms*/ 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<math.h> 5 #include<string.h> 6 #include<algorithm> 7 #define INF 1000000 8 const int maxn=500+5; 9 double lowdist[maxn];10 bool in[maxn];11 int x[maxn],y[maxn];12 double dist(int x1,int y1,int x2,int y2)13 {14 return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));15 }16 void prim(int n)17 {18 lowdist[1]=0;19 for(int i=2;i<=n;i++){20 lowdist[i]=dist(x[1],y[1],x[i],y[i]);21 in[i]=false;22 }23 in[1]=true;24 for(int i=1;i<n;i++){25 double mindist=INF;26 int j=1;27 for(int k=1;k<=n;k++)28 if(mindist>lowdist[k] && !in[k]){29 mindist=lowdist[k];30 j=k;31 }32 in[j]=true;33 for(int k=1;k<=n;k++){34 double temp=dist(x[j],y[j],x[k],y[k]);35 if(lowdist[k]>temp && !in[k])36 lowdist[k]=temp;37 }38 }39 }40 int main()41 {42 int t,m,n;43 scanf("%d",&t);44 while(t--){45 scanf("%d%d",&m,&n);46 for(int i=1;i<=n;i++)47 scanf("%d%d",&x[i],&y[i]);48 prim(n);49 std::sort(lowdist+1,lowdist+1+n);50 printf("%0.2f\n",lowdist[n-m+1]);51 }52 return 0;53 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。