首页 > 代码库 > poj2560
poj2560
求最小生成树
1 //Accepted 240 KB 0 ms 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 const int MAXN =105; 6 const int inf = 100000000; 7 double x[MAXN],y[MAXN]; 8 double a[MAXN][MAXN]; 9 bool vis[MAXN]; 10 double dis[MAXN]; 11 int n; 12 void pre() 13 { 14 for (int i=0;i<n;i++) 15 { 16 for (int j=0;j<n;j++) 17 { 18 a[i][j]=sqrt((double )(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); 19 } 20 } 21 } 22 double prim() 23 { 24 double ans=0; 25 memset(vis,0,sizeof(vis)); 26 for (int i=0;i<n;i++) 27 dis[i]=(double )inf; 28 dis[0]=0; 29 for (int i=0;i<n;i++) 30 { 31 double temp=(double )inf; 32 int k=0; 33 for (int j=0;j<n;j++) 34 { 35 if (vis[j]) continue; 36 if (temp>dis[j]) 37 { 38 temp=dis[j]; 39 k=j; 40 } 41 } 42 vis[k]=1; 43 ans+=temp; 44 for (int j=0;j<n;j++) 45 { 46 if (vis[j]) continue; 47 if (dis[j]>a[k][j]) 48 { 49 dis[j]=a[k][j]; 50 } 51 } 52 } 53 return ans; 54 } 55 int main() 56 { 57 while (scanf("%d",&n)!=EOF) 58 { 59 for (int i=0;i<n;i++) 60 { 61 scanf("%lf%lf",&x[i],&y[i]); 62 } 63 pre(); 64 double ans=prim(); 65 printf("%.2f\n",ans); 66 } 67 return 0; 68 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。