Jungle Roads (pku 1251)

作者在 2008-01-02 18:38:15 发布以下内容

最小生成树,题目的意思很明白,有几种方法写最小生成树,但我只会一种还把名字给忘了(呵呵)-_-!!!!

 

#include <iostream>
#define INF 0xffffff
int line[27][27];
int n;
int count;
bool contain[27];
int sum;
using namespace std;
void initialize()
{
 for(int i=0;i<=n;i++)
  for(int j=0;j<=n;j++)
  {
   if(i==j) line[i][j]=0;
   else line[i][j]=INF;
  }
 memset(contain,false,sizeof(bool)*(n+1));
 contain[1]=true;
 contain[0]=true;
 sum=0;
 count=1;
  return ;
}
void settheline()
{
 for(int i=1;i<n;i++)
 {
  char letter;
  int number;
  cin >>letter>>number;
  {
   int temp;
   temp=(int)letter-64;
   while(number--)
   {
    char le;
    int nu;
    cin >>le>>nu;
    line[temp][(int)le-64]=nu;
          line[(int)le-64][temp]=nu;
   }
  }
 }
 return ;
}
void Findsmallest()
{
 int small=INF;
 int temp1;
 for(int j=1;j<=n;j++)
 {
  if(contain[j])
  {
   for(int i=1;i<=n;i++)
   {
          if(!contain[i])
      {
         if(line[j][i]<small)
    {
    small=line[j][i];
    temp1=i;
    }
      }
   }
  }
 }
 contain[temp1]=true;
 sum+=small;
 count++;
 return ;
}
main()
{
 while(cin >>n&&n!=0)
 {
  initialize();
  settheline();

  while(count!=n)
  {
   Findsmallest();
  }
  cout<<sum<<endl;
 }
 return 0;
}

 


 

acm | 阅读 3616 次
文章评论,共0条
游客请输入验证码
浏览260750次