Prim算法:该算法也被称为加点法,从一个节点开始出发,每次迭代权值代价最小的边对应的点,加入到最小生成树中。算法从某一个顶点s开始,逐渐长大覆盖整个连通网的所有顶点。
加入到生成数的时候就只有两个条件:
1. 该节点之前没加入过生成树中;
2. 该节点所对应的边权值是当前优先级队列中最小的一个。
下面给出流程图:
其实这个过程挺简单的,但是要画图出来就真的有点难度了~
我就简单的就上面那个图给大家讲讲整个过程:
1. 以A作为第一个节点,找到A节点的所有nextEdges(下一条边),并按照权值从小到大放进优先级队列里面去;
2. 选择A节点的nextEdges中权值最小的边,并且该边的节点toNode还没被遍历过的(具体算法实现是还没放进set集合的)
这个时候就选择C(因为A的nextEdges中A到C边的权值最小,并且C还没被遍历过)同时将C放到set里面去(证明它被遍历 过了),如果toNode节点已经被遍历过了,那么就继续找权值第二小的边进行判断~
3.选择C的同时,将C的nextEdges的所有边按照权值从小到大放进优先级队列中(注意:之前存进去的那些边还在优先级队列中)
下面供上算法的具体实现:
欢迎留言~
参考博文:https://blog.csdn.net/luoshixian099/article/details/51908175