Prim算法思想:
从无向图中任意取出一个顶点,把它当作一棵树,然后从与这棵树相接的边中取出一条最短的边,并将这条边及所连接的顶点也并入到这棵树中,此时得到了可两个顶点的树,让后从与这棵树相接的边中取出一条最短的边,并将这条边及所连接的顶点并入到当前的树中,以此类推,算法实现:
void Prim(MGraph g, int v0, int &sum){
int lowcost[maxSize],vset[maxSize];
int i, j, k;
v = v0;
for(i = 1;i <= g.n; i++){
lowcost[i] = g.edgs[v0][i];
vset[i] = 0;
}
vset[v0] = 1;
sum = 0;
for(i = 1; i <= g.n; i++){
min = INF;
for(j = 1;j <= g.n; j++){
if(min > lowcost[j]){
min = lowcost[j];
k = j;
}
}
vset[k] = 1;
v = k;
sum += min;
for(j = 1; j <= g.n ;++j){
if(vset[j]==0 && lowcost[j]>g.edges[v][j] ){
lowcost[j] = g.edges[v][j];
}
}
}
}