最小生成树的目的是使一个图的节点到其他各个节点的距离最短。产生的树成为最小生成树。

最小生成树算法分为普利姆(Prim)算法与克鲁斯卡尔(Kruskal)算法来解决。


Prim算法思想核心:

在一个图中,有n个顶点,首先设置被访问的顶点集合V,然后设置总集合U,U包含所有顶点,然后设置W=U-V,每当访问一个顶点时,就把这个点从W里面删除,然后增加到V里面。

最小生成树-Prim算法_权值

绿色的是节点,蓝色的是边权值


首先:

选定节点1作为起始点,起始点可以任意选择。

此时U={1,2,3,4,5,6,},V={1},W={2,3,4,5,6};


下一步:

然后查找距离上一个节点距离最近的点是什么?

在本题中就是距离节点1最近的点。

边      权值

1->2 : 5

1->3 : 6

1->4 : 1

1->5 : 无穷

1->6 : 无穷

可以看出,最短的距离是1,此时将节点4放入集合V中,

V={1,4};W={2,3,5,6};


再从4这个点来看与其他各边的距离:

4->2 : 7

4->3 : 5

4->5 : 5

4->6 : 4

最短距离是4到6,然后把6放入被访问的节点里面,

V={1,4,6},W={2,3,5};


然后再看6这个节点:

6->2:2

6->3:无穷

6->5:6

把节点2放入V集中,V={1,4,6,2},W={3,5};


此时只剩下节点3与5,距离3与5在V中最近的是节点4,到两点距离都是5,选其中一个,3

V={1,4,6,2,3},W={5};

3到5的距离最短,于是把5放入V中,V={1,4,6,2,3,5},W={};

Prim算法结束。