图的最小生成树Prim算法

图的最小生成树Prim算法

什么是最小生成树

最小生成树按通俗点来说就是图的一个子图,但不同的是这个图包含有原图的全部节点,但边的权值之和就尽量小

如果是非带权图那么他只有生成树并没有最小生树,如图

但最小生成树应该是这样子的

包含全部顶点但边的权值最小

不管是生成树还是最小生成树都不允许图中有环路 ! ! !

普里姆算法-prim算法

Prim算法就是图的最小生成树算法之一,Prim 算法是一种求解加权无向连通图的 MST 问题的贪心算法。它能找出一个边的子集,使得其构成的树包含图中所有顶点,且边的权值之和最小。

Prim算法以图的顶点为基础,从首个初始顶点,寻找到达其他顶点权值最小的边,并把该顶点加入到“已到达顶点”的集合中,此时,这个集合就是这个图的最小生成树

prim算法的使用要点:

  • 使用一个一维数组记录节点
  • 节点上的值是是父节点的序号,而下标的值是代表这个节点的序号
  • 第一个节点总是作为根节点(即序号为0的节点),因为没有父节点其值为-1

如有下图那么一个图

首先根节点进入数组,其值为-1

此时从根节点出发寻找权值最小的边,及其到达的节点,发现和节点2的边的权值更小,将其加入数组中,因为其父节点是根节点,所以值是根节点的下标,值为自己的序号

在从数组中已经加入的所有节点出发发现2和4的节点的边的权值最小

Prim-Unit-6.png

以此循环往复

此时全部顶点已经进入数组,数组就是这个图的最小生成树


图的最小生成树Prim算法
http://move-brain.github.io/super_zhu/2022/12/05/图的最小生成树Prim算法/
作者
super_zhu
发布于
2022年12月5日
更新于
2022年12月5日
许可协议