使用场景
对于连通图从一点出发到达其他各点有很多条路径,但是我们要求最小生成树包含的点和边,最小生成树边 = 点 - 1;
用途在于:求解一地到其他地点最短布线问题。
要求:
最小生成树(1)包含所有点 (2)点点间只有一条通路
相对于克鲁什卡尔算法,适用于稠密图,与边数无关。
编码
- 输入图,minDist[]最小路径
- 由于能生成树的是连通图所以任意一个点开始遍历都可以 我们默认第一个
- 创建theClose 包含所有点的 adjvex相邻边,theClose.lowcost;
- 初始化 默认选择第一个点 for
- 更新 theClose->->adjvex相邻边 = i; theClose.lowcost = getWeight(1, i);
- while 剩余没有遍历的点个数 > 0
- 寻找代价最小点【lowcost>0 || lowcost<min,返回下标min_i;
- 输出当前遍历路径 printf("v%d v%d\n",G.vexs[theclose[min_i].adjvex邻接边],G.vexs[min_i])
- getWeight(min_i-各点[没有被加入最小路径点]) < theClose.lowcost,更新 theClose.adjvex = min_i; theClose.lowcost = getWeight(min_i, i);
标签:普利,min,求解,最小,算法,theClose,lowcost,adjvex From: https://www.cnblogs.com/su27/p/17831106.html