BitComet 旗下网站

转到日志
相关贴吧:
acm of zju

zju1203 最小生成树

楼主 发表于:2008-09-02 22:06:50 [回复]

/*Swordfish     最小生成树
2008-09-02 22:01:43 Accepted 1203 C++ 00:00.01 924K 天将降大任于我
求出每两点的距离,即作为两点的权值
*/
#include<iostream>
#include<cmath>
using namespace std;
const int N=100;
double s[N+1][N+1]; bool check[N+1];
struct node
{
 double x,y;
}a[N+1];
double fun(double x1,double y1,double x2,double y2 )
{
 return  sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
   int n,t=0,i,j,k,d; double r,sum,Min;
   while(scanf("%d",&n)!=EOF&&n)
   {  t++;
      if(t!=1) printf("\n");
   memset(check,0,sizeof(check));
     for(i=0;i<n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);
     for(i=0;i<n;i++)
    for(j=0;j<n;j++)
   { r=fun(a[i].x,a[i].y,a[j].x,a[j].y);
     s[i][j]=r;
    }
   check[0]=1;sum=0;        //最小生成树算法
    for(k=0;k<n-1;k++)
    {
             Min=40000;
    for(i=0;i<n;i++)
             if(check[i])
     for(j=0;j<n;j++)
      if(!check[j]&&s[i][j]<Min)
      { Min=s[i][j]; d=j;
      }
     sum+=Min;check[d]=1;
    
    }
  printf("Case #%d:\n",t);
  printf("The minimal distance is: %.2lf\n",sum);
   }
   return 0;
}

心难泰,世风坏,旧时正气今何在?正义寡,人情薄,闻道虽多,茅塞不开。怪!怪!怪! 空等待,几多载,冲出重围人心快!暴雨打,狂风袭,任他折磨,此志难改。耐!耐!耐!

1楼 发表于:2008-09-03 08:16:13 [回复]

我只是来灌灌水D:


Something ends, something begins, and something never changes......

 

您现在还没有登录,请在登录后发贴