适用于稠密图 void prim (int cost[][MaxV],int n){ int lowcost[MaxV],adjvex[MaxV],i,j,k,min; //初始化 for(i=0;i<n;i++){ lowcost[i]=cost[0][i]; adjvex[i]=0; } for(i=1;i<n;i++){ min=MAX; k=-1; //找一条最短的边 for(j=0;j<n;j++){ if(lowcost[j]!=0&&lowcost[j]<min){ min=lowcost[j]; k=j; } } if(k==-1){ cout<<"该图不连通"<<endl; return; } cout<<adjvex[k]<<" "<<k<<" "<<min<<endl; lowcost[k]=0;//将k加入最小生成树中 //更新操作 for(j=0;j<n;j++){ if(cost[k][j]!=0&&cost[k][j]<lowcost[j]){ lowcost[j]=cost[k][j]; adjvex[j]=k;//k指最小生成树中的顶点 } } } }