HDU1301本题为一道简单的图论的prim算法,虽然本题思路明确但是,本题的前期数据的处理为一大难题;本人也在此WA了2次本来以为是自己写的算法的错误,后来发现对其数据处理存在着错误。代码如下:
#include"stdio.h"
#include"string.h"
#define N 30
int d[N][N],xb[N],n,jl[N];
char c;
void prim()
{
int i,j,k,sum=0,v[N],min[N];
for(i=0;i<n;i++)
{
v[i]=0;
min[i]=10000000;
}
for(min[j=0]=0;j<n;j++)
{
for(k=-1,i=0;i<n;i++)
{
if(!v[i]&&(k==-1||min[k]>min[i]))
k=i;
}
for(v[k]=1,sum+=min[k],i=0;i<n;i++)
{
if(!v[i]&&min[i]>d[k][i])
min[i]=d[k][i];
}
}
printf("%d\n",sum);
}
int main()
{
int i,m,w,j;
char ch,ch1;
while(scanf("%d",&n)&&n)
{
memset(d,76,sizeof(d));
for(i=0;i<n-1;i++)
{
scanf(" %c %d",&ch,&m);
c=ch;
for(j=0;j<m;j++)
{
scanf(" %c %d",&ch1,&w);
d[ch-'A'][ch1-'A']=d[ch1-'A'][ch-'A']=w;
}
}
prim();
}
return 0;
}