最小生成树及其求解算法

本文介绍了图论中的最小生成树概念,重点讲解了Prim算法和Kruskal算法的原理和步骤。Prim算法通过逐步添加最小权值边连接生成树和未连接顶点,而Kruskal算法则是按边权值排序,避免形成环的情况下逐步合并子树以构造最小生成树。
摘要由CSDN通过智能技术生成

最小生成树

图论中,树是图的一种特殊形式,它的众多性质中有两个是求解最小生成树的Prim算法和Kruskal算法的基础:

(1)用一条边连接树中的任意两个顶点都会产生一个新的环;

(2)从树中删去一条边将会得到两棵独立的树。

无权图中的边只是单纯的作为联系两个顶点的抽象概念,而带权图(也称加权图)中为边增加了权重,使得顶点之间的路径形式变得更丰富多样。图的生成树是它的一棵含有其所有顶点的无环连通子图,而带权图的最小生成树(Minimun Spanning Tree,MST)是指生成树中所有边的权值之和最小的生成树。

定义加权无向图的结构如下:

//加权图
struct EdgeWeightedGraph
{
	size_t V; //顶点数
	size_t E; //边数
	map<int, forward_list<tuple<int, int, double>> adj; //改进后的邻接表,tuple存储的是边集
}

由于我们用STL的tuple作为边的存储容器,而tuple的比较操作不符合我们的要求,所以我们得自己定义一个比较操作:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值