【图】最小生成树问题——prim普利姆算法和kruskal克洛斯卡尔算法

图是一种常见的高级数据结构,其中最小生成树也是图中的一个重要问题板块,我们先来说一下几个基本概念,懂的可以直接跳过:
1、连通图:没有方向且每两点之间都有一条线段直接连接。
2、强连通图:有方向且每两点之间都有两条线段双向连接。
3、生成树:每个顶点至少有一条线段与它连接且所有顶点同处一棵树中。
4、最小生成树:权值之和最小的生成树。
我们今天要解决的问题是如何构造一棵最小生成树,我们先看克洛斯卡尔kruskal算法。

克洛斯卡尔kruskal算法

我们先看流程图

Created with Raphaël 2.3.0 算法开始 选择权值最小的边 判断两端点 是否在同一 棵树中,不 是则连接 算法结束 yes no

如果您没有明白,请看下面的示意图
在这里插入图片描述
虚线代表已连接在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时权值最小的边是3,但他的两点已处于同一树,所以忽略。
在这里插入图片描述
打叉的边不满足条件,被忽略,最后得到的最小生成树如下图:
在这里插入图片描述
这课生成树权值为8,算法即结束。

普利姆prim算法

这个算法是基于点的,而克洛斯卡尔算法是基于线的,我们先看流程图

Created with Raphaël 2.3.0 算法开始 选定一个点直至 所有点已选完 判断此点未连接的点 钟权值最小的边两端点 是否在同一棵树中,不 是则连接 算法结束 yes no

就如:
在这里插入图片描述
虚线表示已选或已读
在这里插入图片描述
蓝色代表当前选的线段

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后依然得到权值为8的生成树在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自八中的小鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值