最小生成树,题目的意思很明白,有几种方法写最小生成树,但我只会一种还把名字给忘了(呵呵)-_-!!!!
#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;
}