int Min(AM_Graph& g){
int sign =-1;
int min = MaxInt;for(int i =0; i < g.vexnum; i++)if(min > closedge[i].lowcost&&closedge[i].lowcost!=0){//closedge[i].lowcost!=0是要把已经走过的点排除在外
min = closedge[i].lowcost;
sign = i;}return sign;}
普里姆算法
尤为重要的是,最后一定要记得更新closedge[]
voidminispantree_Prim(AM_Graph& g, char vex){
int a =LocateVex_AM(g, vex);for(int i =0; i < g.vexnum; i++)//把各个点的最小边上的权值初始化为各点到源点的值,最小边上的另一个顶点为源点if(i != a)//区分源点与其他点{
closedge[i].data = vex;
closedge[i].lowcost = g.arcs[a][i];}
closedge[a].lowcost =0;for(int i =1; i < g.vexnum; i++)//此刻i=1{
int k =Min(g);
char u = closedge[k].data;
char v = g.vexs[k];
cout << u << v << endl;for(int j =0; j < g.vexnum; j++)if(g.arcs[j][k]< closedge[j].lowcost){
closedge[j].data = g.vexs[k];
closedge[j].lowcost = g.arcs[j][k];}}}