hdu1162----------- prim模板

一个很简单的模板题。中间遇到一个很低级的错误,让我调了半个小时。            好了, prim到此为止。接下来还有foyd,djstl,好多啊!加快进度

AC:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
struct point{
 double x,y;
}p[101];

double map[101][101];
int visit[101];
double low[101];
int n;

int prim()
{
 double min,result=0;
 int i,j,k,pos;
 memset(visit,0,sizeof(visit));
 pos=1;
 visit[pos]=1;
 for(i=1;i<=n;i++)
 {
  if(i!=pos)
  low[i]=map[pos][i];
 }
 for(i=1;i<n;i++)
 {
  min=100000000;
  for(j=1;j<=n;j++)
  {
   if(!visit[j]&&min>low[j])
   {
    min=low[j];
    pos=j;
   }
  }
  result+=min;
  visit[pos]=1;
  for(j=1;j<=n;j++)
  {
   if(!visit[j]&&map[pos][j]<low[j])
   low[j]=map[pos][j];
  }
 }
 printf("%.2lf\n",result);
 return 0;
}
int main()
{
 int i,j,k;
 while(scanf("%d",&n)!=EOF)
 {
  for(i=1;i<=n;i++)
  scanf("%lf%lf",&p[i].x,&p[i].y);
  
  for(i=1;i<=n;i++)
  {
   for(j=1;j<=n;j++)
   {
    map[i][j]=sqrt((p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y));
          //printf("%.2lf\n",map[i][j]);
   }
  }
  prim();
 }
 return 0;
}

posted on 2012-03-17 20:13  hrbust_09zhangyabin  阅读(189)  评论(0编辑  收藏  举报