const   int  CNST_NumGrphNodes  =   101 ;
// 最小生成树元素
struct  TTreeEdge  {
    
int  v1, v2; 
    
double  w;
}
;
// 候选集元素
struct  TCloseRec  {
    
double  lowCost;
    
int  vec;
}
;
int  MST_prim( int  g[][CNST_NumGrphNodes],  int  n, TTreeEdge  * minTree)  {
    
int  i, j, k;
    TCloseRec 
* close  =   new  TCloseRec[n];    
    
for  (i = 1 ; i < n; i ++ {
        close[i].vec 
=   0 ;
        close[i].lowCost 
=  g[i][ 0 ];
    }

    close[
0 ].lowCost  =   - 1 ;
    
for  (i = 0 ; i < n - 1 ; i ++ {
        
// 找图点
         for  (k = 1 ; k < n; k ++ {
            
if  (close[k].lowCost  !=   - 1 {
                
break ;
            }

        }

        
for  (j = k + 1 ; j < n; j ++ {
            
if  (close[j].lowCost  !=   - 1 {
                
if  (close[j].lowCost  <  close[k].lowCost)  {
                    k 
=  j;
                }

            }

        }

        
// 加入树中
        minTree[i].v1  =  k;
        minTree[i].v2 
=  close[k].vec;
        minTree[i].w 
=  close[k].lowCost;
        close[k].lowCost 
=   - 1 ;
        
// 调整候选集
         for  (j = 1 ; j < n; j ++ {
            
if  (close[j].lowCost  >  g[j][k])  {
                close[j].lowCost 
=  g[j][k];
                close[j].vec 
=  k;
            }

        }

    }

    delete []close;
    
return   0 ;
}