求最小生成树Prim(普里姆)和Kruskal(克鲁斯卡尔)算法

这篇具有很好参考价值的文章主要介绍了求最小生成树Prim(普里姆)和Kruskal(克鲁斯卡尔)算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 想求最小生成树,我们首先得弄懂以下几个概念

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

 连通图:图中任意两个顶点都是连通的

极小连通子图:既要保持图连通又要使得边数最少的子图

生成树: 包含图中全部顶点的一个极小连通子图

连通图用通俗的话来讲就是,某一个顶点,可以直接或者间接(通过其他顶点)到达图上的所有顶点

而在相邻2个顶点的每一条边都可以被赋予一定的权值,求最小生成树就是在原来被赋予权值连通图上,先暂时去掉所有边,通过某种算法,构造出  边数最少,所有边权值和最小的 生成树

这样的树被称为, 最小生成树

我们这样用两种算法去解答,分别是Prim(普里姆)算法和Kruskal(克鲁斯卡尔)算法

 Prim(普里姆

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

(1)首先,任取一个点,比如说取节点1,将1加入    顶点集合 {1}

(2)从顶点集合中选择节点1,周围有3个边可选(6,1,5),选择其中最小的1,然后连接上(1-3),然后将3加入顶点集合{1、3},

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

 文章来源地址https://www.toymoban.com/news/detail-745328.html

(3)从顶点集合中选择,不能是连接过的边,周围有6个边可选(6、5、5、5、6、4),选择其中最小的4,然后连接上(3-6),然后将6加入顶点集合{1、3、6},

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

 

(4)从顶点集合中选择,不能是连接过的边,周围有7个边可选(6、5、5、5、6、6、2),选择其中最小的2,然后连接上(6-4),然后将4加入顶点集合{1、3、6、4},

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

 

(5)从顶点集合中选择,不能是连接过的边,连接的边不能形成回路,周围有4个边可选(6、5、6、6),(两个边5因为不能形成闭合回路删除了,加上连接过的2)选择其中最小的5,然后连接上(3-2),然后将2加入顶点集合{1、3、6、4、2},

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

 

(5)从顶点集合中选择,不能是连接过的边,连接的边不能形成回路,周围有3个边可选(6、3、6),(一个边6因为不能形成闭合回路删除了,加上连接过的5,增加了一个3)选择其中最小的3,然后连接上(2-5),然后将5加入顶点集合{1、3、6、4、2、5},

至此,所有顶点都并入顶点集合完毕,算法运行结束。所以如图呈现的便是最小生成树。

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

以上是Prim算法

现在我要介绍的是Kruskal(克鲁斯卡尔算法 

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

 我自认为这个算法比较简单,容易理解

首先去掉所有边,然后把所有权值的边都列出来,按照从小到大的顺序依次放回原图中,如果放回的边构成回路,则选取下一个(稍大一点的边)再放回图中,直至将所有顶点都连接起来,(有个小细节:每连接好一条线,就可以将连接线的两个顶点加入顶点集合当中,当判断到顶点数==边数+1的时候,最小生成树完成,程序结束)(所有最小生成树都符合顶点数==边数+1这个规律

1、具体举例将所有边的权值按照从小到大排序(12 3 4 5 5 5 6 6 6),共10个,

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

(12 3 4 5 5 5 6 6 6)

2、选取最小的1,并删除,将1对应的边放回原图中,1、3顶点并入顶点集合{1、3},这时有1条边

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

(2 3 4 5 5 5 6 6 6)

 3、选取最小的2,并删除,将2对应的边放回原图中,4、6顶点并入顶点集合{1、3、4、6},这时有2条边

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

 ( 3 4 5 5 5 6 6 6)

 4、选取最小的3,并删除,将3对应的边放回原图中,2、5顶点并入顶点集合{1、3、4、6、2、5},这时有3条边

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

 (  4 5 5 5 6 6 6)

 5、选取最小的4,并删除,将4对应的边放回原图中,3、6顶点并入顶点集合{1、3、4、6、2、5},原来有了,就不用增加,这时有4条边

请分别利用prim算法与kruskal算法求解下图所示的最小生成树,写出过程,数据结构,图论,算法,数据结构

 

(  5 5 5 6 6 6)

 6、选取最小的5,并删除,将5对应的边放回原图中,2、3顶点并入顶点集合{1、3、4、6、2、5},原来有了,就不用增加.这时有5条边,当判断到顶点数==边数+1的时候,(6个顶点=5条边)最小生成树完成

 

 

 

到了这里,关于求最小生成树Prim(普里姆)和Kruskal(克鲁斯卡尔)算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最小生成树(详解普里姆算法)

    首先,我们来看一下 图的一些基本知识点 : 图 :图 G=(V,E) 由顶点集 V 和边集 E 组成。每条边对应一个点对 (v,w),其中 v,w 属于 V 。如果图中的点对是有序的,那么该图就是有向图,反之为无向图。 邻接点 :若顶点 v 与 w 之间存在一条边,则认为顶点 v 与 w 邻接。 权 :图

    2024年01月19日
    浏览(63)
  • prim算法(普里姆算法)详解

    了解了什么是最小生成树后,本节为您讲解如何用普里姆(prim)算法查找连通网(带权的连通图)中的最小生成树。 普里姆算法查找最小生成树的过程,采用了贪心算法的思想。对于包含 N 个顶点的连通网,普里姆算法每次从连通网中找出一个权值最小的边,这样的操作重

    2024年01月16日
    浏览(21)
  • 数据结构——普里姆(Prim)算法

    普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。 以下是数据结构中关于普里姆算法的操作(编程风格参考严蔚敏版数据结构)

    2024年02月06日
    浏览(27)
  • 已知无向图G如下所示,使用普里姆 (Prim)算法求图G的最小生成树。 (a)请写出从顶点T出发,加到最小生成树中的边次序。 (6分) (2)说明Prim算法更适用于求哪种类型无向图的最小生 成树。(2分) (3)当图中顶点个数为n,边的个数为e时,该算法

    (a)从顶点T出发,加到最小生成树中的边次序如下: 先加入顶点T到顶点E的边,得到的最小生成树为:T-E 再加入顶点E到顶点D的边,得到的最小生成树为:T-E-D 再加入顶点D到顶点B的边,得到的最小生成树为:T-E-D-B 再加入顶点B到顶点C的边,得到的最小生成树为:T-E-D-B-C 再加

    2024年01月17日
    浏览(28)
  • 数据结构---最小生成树((普里姆算法)C语言看了就懂教程)

        普里姆算法就是“加点法”,是一种将连通网转换成最小生成树的一种算法     在一个连通图的所有生成树中,各边代价之和最小的那颗生成树称为该连通图的最小代价生成树(MST)     ①对于任意一张连通图,假设 N = (V,E)是连通网,TE就是最小生成树中边的集合    

    2024年02月03日
    浏览(20)
  • 算法提升:图的最小生成树算法-克鲁斯卡尔(Kruskal)

    目录 概念 思路 代码 克鲁斯卡尔算法查找最小生成树的方法是:将连通网中所有的边按照权值大小做升序排序,从权值最小的边开始选择,只要此边不和已选择的边一起构成环路,就可以选择它组成最小生成树。对于 N 个顶点的连通网,挑选出 N-1 条符合条件的边,这些边组

    2024年02月03日
    浏览(22)
  • 最小生成树(Prim算法,Kruskal算法)

    (1)生成树: 如果在一个无向连通图不包含回路(连通图中不存在环),则为一个树 (2)最小生成树(minimal spanning tree): 在一个图所有生成树中,代价最小的生成树称为最小生成树 (3)生成树的代价: 在一个无向连通网中,生成树各边的权值之和称为该生成树的代价

    2024年02月08日
    浏览(21)
  • 最小生成树Kruskal、Prim算法C++

    连通图: 在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1和顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图。 生成树: 一个连通图的最小连通子图称作为图的生成树。有 n个顶点 的连通图的生成树有 n个顶点和 n-1 条边。 最小生成树: 最小生活

    2024年02月10日
    浏览(21)
  • 【刷题】图论——最小生成树:Prim、Kruskal【模板】

    假设有n个点m条边。 Prim适用于邻接矩阵存的稠密图,时间复杂度是 O ( n 2 ) O(n^2) O ( n 2 ) ,可用堆优化成 O ( n l o g n ) O(nlogn) O ( n l o g n ) 。 Kruskal适用于稀疏图,n个点m条边,时间复杂度是 m l o g ( m ) mlog(m) m l o g ( m ) 。 Prim:遍历n次,每次选择 连通块和外面的点 到连通块距离

    2024年04月13日
    浏览(23)
  • 最小生成树(Prim算法与Kruskal算法)

    一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的n-1条边。我们把构造连通网的最小代价生成树称为最小生成树。 例如下图中①、②、③都是左侧图的生成树,但③是构造连通网的最小代价,所以③是该图的最小生成树。 P

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包