/********************************************* ****************prim算法********************** **********************************************/ void MiniSpanTree_Prim(MGraph G) { int min, i, j, k; int adjvex[MAXVEX]; //保存相关顶点下标 int lowcost[MAXVEX]; //保存相关顶点间边的权值 lowcost[0] = 0; //V0作为最小生成树的根开始遍历, 权值为0 adjvex[0] = 0; //V0第一个加入 //初始化操作 for (i=1; i<G.numVertexes; i++) { lowcost[i] = G.arc[0][i]; // 将邻接矩阵第0行所有权值先加入数组 adjvex[i] = 0; // 初始化全部先为VO的下标 } //生成最小生成树全过程 for (i=1;i < G.numVertexes; i++) { min = INFINITY; //初始化为不可能的值 j = 1; k = 0; //遍历全部顶点 while ( j < G.numVertexes) { //找出lowcost已存储的最小值 if ( lowcost[j]!=0 && lowcost[j]<min) { min = lowcost[j]; k = j; } j++; } //打印当前最小的边 printf("(%d %d)", adjvex[k], k); lowcost[k] = 0; //邻接矩阵k行逐个遍历全部顶点 for (j=1;j < G.numVertexes; j++) { if (lowcost[j]!=0 && G.arc[k][j]<lowcost[j]) { lowcost[j] = G.arc[k][j]; adjvex[j] = k; } } }
最小生成树 (prim)
猜你喜欢
转载自www.cnblogs.com/Kingpenguin/p/9977187.html
今日推荐
周排行