最小生成树的几种算法简单图解(不含代码、不含比较)

目录

1.Kruskal算法 

2.Prim算法

3.Boruvka算法

4.Reserve-delete算法

5.Dijkstra算法

6.环删除算法


1.Kruskal算法 

算法描述:(选择最小边)

  1. 找出最小的边
  2. 不构成回路
  3. 连接出最小生成树

图片理解:

图片步骤便于理解:

找出最小边1

接着是2

接着是4

然后是5

然后是6,因为6和5、2构成了回路,所有舍去

然后是7,7和2、1、5构成了回路,也舍去

然后是8,两条8选择一个即可,两条都选择会构成回路

然后是10,而10和8、2、1、5构成回路,所以舍去

一共7个顶点,现在有6条边,最小生成树就如图所示了


2.Prim算法

算法描述:(点连接最小边)

  1. 随机选取一个顶点,找出和顶点相连边中最小的边
  2. 找出新的顶点相连边和原先顶点集合相连边中最小的边,不构成回路
  3. 如此往复,连接出最小生成树


图片理解:

假设选取A为最初顶点,找出相连边A:4、8中最小的边4

新顶点B,在A:8,B:9、8、10中找到最小的8,两个8随机哪个都行

D在原先两个顶点A:8,B:9、10和自己相连边7、2、9中找到2

C在A:8,B:9、10,D:9、7,C:1中找出1

F在B:10,D:7,F:2,5中找出最小的2

G在B:10,F:5,G:6中找出最小的5

至此,所有顶点连接完毕,这就是要的最小生成树


3.Boruvka算法

算法描述:(按点顺序连接最小边)

  1. 随机找一个顶点,在相连的边中找出最小的边
  2. 新顶点在所有相连的边中找最小的边(包含之前已经相连的边)
  3. 接着按顺序遍历每个顶点(按顺序A、B、……)
  4. 连接连通分支
  5. 连接出最小生成树

图片理解:

按顺序从A找,4、8中找4

B在4、9、8、10找4

C在8、9、2、1中找1

D在2、8、7、9找2

E在10、7、5、6找5

F在1、9、5、2中找1

G在2、6找2

连接两个连通分支A、B和C、D、E、F、G,在8、9、8、10中找8

最小生成树连接完成


4.Reserve-delete算法

算法描述:(删除最大边)

  1. 找出最大的边,删除
  2. 如此往复,不能导致不连通
  3. 删到只剩n-1条边即可
  4. 连接出最小生成树

图片理解:

删除10

删除9,两个9删除后都连通,可以直接删除

删除其中一个8

删除7

删除6

剩下6条边,连接出最小生成树


5.Dijkstra算法

算法描述:(列表更新距离)

  1. 需要一个列表记录起点到各个顶点的距离和前一个顶点
  2. 随机找一个顶点,认为是起点,在相邻边中找出最小的边,并认为边的另一端的顶点为新顶点
  3. 起点相邻的顶点先更新从起点到该顶点的距离,不更新前一个顶点
  4. 更新完毕后,在没有前一个顶点的顶点(除起点)距离中找最小的那个更新前一个顶点
  5. 如此往复,直至所有顶点都有前一个顶点
  6. 连接成最小生成树

图片理解:

如果以A为起点,找到4,连接B,AB是最短的,B的前一个顶点认为是A

而C只是更新距离,前一个顶点未知

列表如下

然后是B相连的C、D、E

C在8和4+9中13大于8所以不更新

D更新4+8,不更新前一个顶点(目前只有AB这一条边,不走ACD)

E更新4+10,不更新前一个顶点(不走其他路)

然后在列表中找到没有前一个顶点中的最小的距离,在8、12、14中找8,认为C的前一个顶点为A,更新

B相邻的D、E

D走ABD为12,走ACD为10,更新D的距离为10

E走ABE为14无其他路走

C相邻的D、F

F走ACF为9,更新为9然后在列表中找到没有前一个顶点中的最小的距离,在10、14、9中找9,认为F的前一个顶点为C,更新然后F相邻的D、E、G

D走ACFD为18,大于10不更新

E走ACFE为14,等于14不更新

G走ACFG为11,无其他路走,更新

在10、14、11找10,更新前一个结点为C

D相邻E

E走ABDE为15,走ACDE为15,走ACFDE为25,都大于14,不更新

列表中14、11找11,前一个结点为F,更新

剩下E,更新前一个结点为F

所有结点都连接完毕,只需回溯前一个结点依次连接即可,连接成最小生成树


6.环删除算法

以下算法只是个人通过一篇博客思考总结的,至于正确性不得而知,望有人能够指正

博客来源:求最小生成树的新算法-CSDN博客

算法描述:(环中最大边一定不在最小生成树中)

  1. 在所有环中找到最大的那个边,删除,确保不导致不连通
  2. 连接成最小生成树

图片理解:

先删除最小的环中找最大的边,保证连通

ABC中的9

BCD中的9

BDE中的10

CDE中的9

DEF中的9

EFG中的6

然后在ABDC中的8删除一个

CDEF中的7删除

连接成最小生成树


  • 28
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值