普里姆算法求最小生成树
算法完整代码展示:
void Prim(MatGraph g,int v)
{
int lowcost[MAXV],min,n=g.n;
int closest[MAXV],i,j,k;
for (i=0;i<n;i++)
{
lowcost[i]=g.edges[v][i];
closest[i]=v;
}
for (i=1;i<n;i++)
{
min=INF;
for (j=0;j<n;j++)
if (lowcost[j]!=0 && lowcost[j]<min)
{
min=lowcost[j]; k=j;
}
printf(" 边(%d,%d)权为:%d\n",closest[k],k,min);
lowcost[k]=0;
for (j=0;j<n;j++)
if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j])
{ lowcost[j]=g.edges[k][j];
closest[j]=k;
}
}
}
对算法各部分的解释:
void Prim(MatGraph g,int v)
{
int lowcost[MAXV],min,n=g.n;
int closest[MAXV],i,j,k;
for (i=0;i<n;i++)
{
lowcost[i]=g.edges[v][i];
closest[i]=v;
}
for (i=1;i<n;i++)
{
min=INF;
for (j=0;j<n;j++)
if (lowcost[j]!=0 && lowcost[j]<min)
{
min=lowcost[j]; k=j;
}
printf(" 边(%d,%d)权为:%d\n",closest[k],k,min);
lowcost[k]=0;
for (j=0;j<n;j++)
if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j])
{
lowcost[j]=g.edges[k][j];
closest[j]=k;
}
}
}