prim 算法优化:
普通法:
int nearvex[Maxn], lowest[Maxn], road[Maxn][Maxn], n;
int prim(int u) //从u出发构造最小生成树,共n个点
{
int i, j, k, min, cost=0;
for(i=0;i<n;i++){//顶点下标从0开始
lowest[i]=road[u][i]; //赋初值
nearvex[i]=u;//距离i的前一节点
}
nearvex[u]=-1;//-1表示已经该点已加入的最小生成树
for(i=1;i<n;i++){//再加 (n-1) 个点(每次在未加入最小生成树的点集中找距离已建树点集的最小值)
min=INF, k=-1;
for(j=0;j<n;j++){
if(nearvex[j] != -1&&lowest[j]<min){
k=j;
min=lowest[j];
}
}
if(k != -1){
nearvex[k]=-1;
cost+=lowest[k];
for(j=0;j<n;j++){
if(nearvex[j] != -1&&road[k][j]<lowest[j])
lowest[j]=road[k][j];//从k出发更