void prim ( int n,const number W[ ] [ ],set_ of_edges & F )
{
index i , vnear;
number min;
edge e;
index nearest [2..n];
number distance [2..n];
F = Ø ;
for ( i = 2 ; i ≤ n ; i ++) {
narest [i] = 1 ;
distance [i] = W [1] [i] ;
}
repeat ( n-1 times ) {
min = ∞ ;
for ( i = 2 ; i < = n ; i ++)
if ( 0 ≤ distance [i] < min ) {
min = distance [i] ;
vnear = i ;
}
e = edge connecting vertices indexed by near and nearest [ vnear ] ;
add e to F ;
distance [ vnear ] = -1 ;
for ( i = 2 ; i ≤ n ; i ++)
if ( W[i] [ vnear ] < distance [i]) {
distance [i] = W [i] [ vnear ] ;
nearest [i] = vnear ;
}
}
}