void Prim( int gm[ ][MAXNODE], int n, int closevertex[ ]) |
{ /*用Prim 方法建立有n 个顶点的邻接矩阵存储结构的网图gm 的最小生成树*/ |
/*从序号为0 的顶点出发;建立的最小生成树存于数组closevertex 中*/ |
int lowcost[100],mincost; |
int i,j,k; |
for ( i=1; i<n; i++ ) /*初始化*/ |
{ |
lowcost[i]=gm[0][i]; |
closevertex[i]=0; |
} |
lowcost[0]=0; /*从序号为0 的顶点出发生成最小生成树*/ |
closevertex[0]=0; |
for ( i=1; i<n; i++ ) /*寻找当前最小权值的边的顶点*/ |
{ |
mincost=MAXCOST; /*MAXCOST 为一个极大的常量值*/ |
j=1; |
k=1; |
while ( j<n ) |
{ |
if ( lowcost[j]<mincost && lowcost[j]!=0 ) |
{ |
mincost=lowcost[j]; |
k=j; |
} |
j++; |
} |
printf ( “顶点的序号=%d 边的权值=%d\n”,k,mincost ); |
lowcost[k]=0; |
for ( j=1; j<n; j++ ) /*修改其它顶点的边的权值和最小生成树顶点序号*/ |
if ( gm[k][j]<lowcost[j] ) |
{ |
lowcost[j]=gm[k][j]; |
closevertex[j]=k; |
} |
} |
} |