秒懂算法 | Prim算法

简介: 实例演示Prim算法运行过程。

640.jpg

01、实例构造

按Prim算法对如图1所示的无向连通带权图构造一棵最小生成树。

640.png


■ 图1 无向连通带权图

假定初始为顶点1,即设定最小生成树T的顶点集合U={1},V-U={2,3,4,5,6};

(1) 初始化,辅助空间closest和lowcost中的值如表1所示。

表1 集合U、V-U及辅助数组closest、lowcost的初始数据

640.png


(2) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[3],把它相连的V-U中的顶点3加入到U集合中,把边(closest[3],3)加入到T中,如图2粗线所示。

640.png


■ 图2 将(1,3)加入到T中示意

检查由于3号点的加入,新添加的连接U和V-U的边:

640.png


修正后的数据如表2所示。

表2第一步贪心选择后集合U、V-U、closest、lowcost数据


640.png


(3) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[6],把它相连的V-U中的顶点6加入到U集合中,把边(closest[6],6)加入到T中,如图3所示粗线。

640.png


■ 图3 将(3,6)加入到T中示意

检查由于6号点的加入,新添加的连接U和V-U的边:

640.png


修正后的数据如表3所示。

表3 第二步贪心选择后集合U、V-U、closest、lowcost数据


640.png


(4) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[4],把它相连的V-U中的顶点4加入到U集合中,把边(closest[4],4)加入到T中,如图4粗线所示。

640.png


■ 图4 将(6,4)加入到T中示意图

检查由于4号点的加入,新添加的连接U和V-U的边;没有添加连接U和V-U的边。数据如表4所示。

表4 第三步贪心选择后集合U、V-U、closest、lowcost数据


640.png


(5) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[2],把它相连的V-U中的顶点2加入到U集合中,把边(closest[2],2)加入到T中,如图5粗线所示。

640.png


■ 图5将(3,2)加入到T中示意

检查由于2号点的加入,新添加的连接U和V-U的边:w(2,5)=3,lowcost[5]=6,w(2,5)<lowcost[5],所以修正lowcost[5]=3,closest[5]=2。

数据如表5所示。

表5第四步贪心选择后集合U、V-U、closest、lowcost数据


640.png


(6) 贪心选择连接U和V-U的权最小的边,即V-U中lowcost最小的lowcost[5],把它相连的V-U中的顶点5加入到U集合中,把边(closest[5],5)加入到T中,如图6粗线所示。

640.png


■ 图6 将(2,5)加入到T中示意

各数据结构中数据如表6所示。

表6第五步贪心选择后集合U、V-U、closest、lowcost数据


640.png


此时,U=V,算法结束。算法得到的最小生成树如图7所示。

640.png


■ 图7 最小生成树T

目录
相关文章
|
6月前
|
算法
最小生成树算法:Prim算法
在图论中,最小生成树(Minimum Spanning Tree,简称MST)是一种常用的算法问题。最小生成树是指在一个加权连通图中选取边的子集,使得所有顶点都被覆盖,并且边的总权值最小。
160 0
|
5月前
|
算法 C++
用prim和kruskal算法求最小生成树问题
用prim和kruskal算法求最小生成树问题
47 0
|
9月前
|
供应链 算法 Java
java数据结构最经济的地下通道建设方案prim算法
MX是世界上第一大传媒娱乐企业,该公司数十年的经营历史中创作了很多经典影片,此外还经营着很多的规模十分宏大世界级的主题娱乐公园。最近MX公司刚和C国X城市达成协定,共同投资建设C国国内唯一一家主题娱乐公园。
48 0
|
10月前
|
算法 Java
数据结构(13)最小生成树JAVA版:prim算法、kruskal算法
13.1.概述 最小生成树,包含图的所有顶点的一棵树,树的边采用包含在图中的原有边中权重和最小的边。翻译成人话就是遍历一遍全图所有顶点的最短路径,这条路径就叫最小生成树。 最小生成树存在和图是连通图互为充要条件,顶点都不连通,肯定不可能有路能遍历一遍全图。 求解最小生成树有两种常用算法:
108 0
|
10月前
|
算法
Prim算法和Kruskal算法到底哪个好?
Prim算法和Kruskal算法到底哪个好?
136 0
|
11月前
|
算法
大话数据结构--Prim算法
大话数据结构--Prim算法
79 0
|
11月前
|
算法 内存技术
搜索与图论-最小生成树(Prim 算法和 Kruskal 算法)
搜索与图论-最小生成树(Prim 算法和 Kruskal 算法)
prim算法的实现
prim算法的实现
|
算法 C语言
最小生成树——Prim算法与Kruskal算法
最小生成树——Prim算法与Kruskal算法
306 0
最小生成树——Prim算法与Kruskal算法
|
算法
Prim算法(普利姆)最小生成树
Prim算法(普利姆)最小生成树
90 0