Prim是一种最小生成树算法

什么是最小生成树?

无回路,且包含原图中的n-1条边。
包含原图中的全部顶点。
边的权重和在所有其他生成树中最小。
最小生成树存在,则该图一定连通。反过来一样,图连通,则最小生成树一定存在。
那么如何构建满足以上条件的生成树?这篇日志先介绍其中一种常用的普里姆(Prim)算法。Prim算法构建最小生成树,简单来说就是在图中,从某一顶点出发,逐步构建,让一棵小树逐渐长大。用一个例子来说明更清晰点吧!首先看下面一张无向网图:
Prim算法
要构造这张图的最小生成树,首先,假设我们从V0顶点开始出发,也就是以V0为根结点开始建树,接着往外扩展,从与V0顶点相邻的顶点中找出权值最小的顶点,可以看到是V6,所以把V6和V0连接起来。
Prim算法
也就是把V6收录进了这棵最小生成树中了。接着继续,从当前树中顶点的邻接点中(也就是V0和V6的邻接点中,找出权值最小的顶点)。可以看到是V1,所以把V1也接入最小生成树中。
Prim算法
然后继续,到V2结点,也接入最小生成树中
Prim算法
因为不能形成回路,所以V2和V6之间不能连接(虽然权值最小,等于3)。V0和V1之间也不能连接。所以只能V6和V4连接
Prim算法
最后V4和V5连接,V4再和V3连接,就完成了这棵最小生成树的构建了。

Prim算法
Prim算法

相关文章: