主题:请问这个prim算法错在哪?
[em7]
#define MAXVEX 30
#define MAXCOST 1000
void prim(int c[MAXVEX][MAXVEX],int n)
{
int i,j,k,min,lowcost[MAXVEX],closest[MAXVEX];
bool s[MAXVEX];
s[1]=true;
for(i=2;i<=n;i++)
{
lowcost[i]=c[1][i];
closest[i]=1;
s[i]=false;
}
for(i=1;i<=n;i++)
{
min=MAXCOST;
j=1;
for(int k=2;k<=n;k++)
if(lowcost[k]<min&&(!s[k]))
{
min=lowcost[k];
j=k;
}
printf("(%d,%d): %d \n",closest[j],j,lowcost[i]);
s[j]=true;
for(k=2;k<=n;k++)
if(c[j][k]<lowcost[k]&&(!s[k]))
{
lowcost[k]=c[j][k];
closest[k]=j;
}
}
}
void main()
{
int n=7,i,j,mx[MAXVEX][MAXVEX];
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
mx[i][j]=MAXCOST;
mx[1][2]=50;
mx[1][3]=60;
mx[2][4]=65;
mx[2][5]=40;
mx[3][4]=52;
mx[3][7]=45;
mx[4][5]=50;
mx[5][6]=70;
mx[4][6]=30;
mx[4][7]=42;
printf("最小生成树边集:\n ");
prim(mx,n);
}
#define MAXVEX 30
#define MAXCOST 1000
void prim(int c[MAXVEX][MAXVEX],int n)
{
int i,j,k,min,lowcost[MAXVEX],closest[MAXVEX];
bool s[MAXVEX];
s[1]=true;
for(i=2;i<=n;i++)
{
lowcost[i]=c[1][i];
closest[i]=1;
s[i]=false;
}
for(i=1;i<=n;i++)
{
min=MAXCOST;
j=1;
for(int k=2;k<=n;k++)
if(lowcost[k]<min&&(!s[k]))
{
min=lowcost[k];
j=k;
}
printf("(%d,%d): %d \n",closest[j],j,lowcost[i]);
s[j]=true;
for(k=2;k<=n;k++)
if(c[j][k]<lowcost[k]&&(!s[k]))
{
lowcost[k]=c[j][k];
closest[k]=j;
}
}
}
void main()
{
int n=7,i,j,mx[MAXVEX][MAXVEX];
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
mx[i][j]=MAXCOST;
mx[1][2]=50;
mx[1][3]=60;
mx[2][4]=65;
mx[2][5]=40;
mx[3][4]=52;
mx[3][7]=45;
mx[4][5]=50;
mx[5][6]=70;
mx[4][6]=30;
mx[4][7]=42;
printf("最小生成树边集:\n ");
prim(mx,n);
}