假设在n个城市间建立通信网络,则联通n个城市只需要n-1条线路,这就存在n!种联通网络即生成树,那么这就要考虑怎么建立网络能使路径最短,成本最低或是权重和最小,这个问题就是最小生成树问题(minimum cost spanning tree)。而prim算法是构造最小生成树的方法之一。
为了实现这个算法,需要设置一个辅助数组closedg[i],其中有两个分量,一个存储顶点元素(边的起始点),一个存储权值,本质上,这个数组存储的是已经进入最小生成树的顶点到其他顶点的最小权重信息,包括边的起始点,例如,closedg[k]=(v1,8),代表生成树中点v1到下标为k的元素的权重最小,且最小权重为8。
代码实现过程:
1,定义数组辅助结构体数组,通过首先放入一个顶点下标为k的顶点,初始化数组,并令close[k]={ (随机数) , 0}
2,选出最小路径下标k顶点,辅助数组中存储的顶点是最小路径边的起始点,终点是k号顶点,同时计算最小代价:
weightsum = weightsum + closedg[k].weight; //计算最小代价值
3