hdu1879------------prim算法模板

水题,和1102一样。还不如1863呢!今天好像把连通工程这种类型的题刷光了!嘿嘿嘿,掌握prim后刷一道过一道,好痛快!

AC:

#include<stdio.h>
#include<string.h>
int map[101][101];
int low[101];
int visit[101];
int n;

int prim()
{
 int i,j,k,pos,min;
 int result=0;
 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("%d\n",result);
 return 0;
}
 
int main()
{
 int i,j,k;
 int s,e,w,temp;
 while(scanf("%d",&n)!=EOF&&n!=0)
 {
  for(i=1;i<=n*(n-1)/2;i++)
  {
   scanf("%d%d%d%d",&s,&e,&w,&temp);
   if(temp==0)
   map[s][e]=map[e][s]=w;
   if(temp==1)
   map[s][e]=map[e][s]=0;
  }
  prim();
 }
 return 0;
}

posted on 2012-03-17 19:04  hrbust_09zhangyabin  阅读(250)  评论(0编辑  收藏  举报