数学建模【最小生成树】

本文介绍了最小生成树在图论中的概念,以及其在通信建设中的实际应用。通过MATLAB示例展示了如何使用Prim和Kruskal算法求解最小生成树,以实现成本最低的通信线路或管道铺设。
摘要由CSDN通过智能技术生成

一、最小生成树简介

最小生成树也是图论中的概念,还是推荐对数据结构图论一点不了解的同学先去粗略了解一下。

这里的树不像数据结构中单独成一章的树,图论中的树是连通的无环路的无向图。

生成树是连通图的一个子图,且是一个树,并且包含图的所有顶点。

最小生成树是所有生成树中,边的权值之和最小的生成树。

注意:一个图,可能有多个生成树;一个图中的所有生成树中,可能有多个最小生成树。

二、适用赛题

通信建设、管道铺设规划类问题,如已知有X个城市,其相互之间的路径距离已知,要求以最小的成本建设通信线路或铺设管道,使得城市之间能够相互连通。

三、模型流程

四、流程解析

1.前提假设

老生常谈,不过多赘述。

2.抽象

将题目抽象为一个带权无向图,将问题抽象为求所有顶点两两之间都存在路径(连通),且总路径(权值之和)最小,也就是求最小生成树。

3.创建求解

图结构的创建在单源最短路径已经讲过,此处不再赘述。

下面看代码

s=cellstr(strcat('v',int2str([1:9]')));
G=graph(a,s,'upper');  % 仅使用 A 的上三角矩阵来构造图G。
p=plot(G,'EdgeLabel',G.Edges.Weight);   % 绘制出图G

% minspantree函数求解最小生成树
% T=minspantree(G)是默认使用Prim算法
T=minspantree(G,'Method','sparse');      % 可指定使用Kruskal算法

L = sum(T.Edges.Weight)     % 对最小生成树的边的权重求和
highlight(p,T,"EdgeColor","red",'LineWidth',2.5)

代码前面部分不需要关注,创建图结构按自己喜好创建即可。

注意:求解最小生成树算法常见有两种,一个是Prim算法,一个是Kruskal算法

  • Prim算法是基于顶点开始求,所以Prim算法比较适合点少边多的图
  • Kruskal算法是基于边开始求,所以Kruskal算法比较适合边少点多的图

而MATLAB也是相当人性化的提供了这两个算法求解最小生成树

如上面代码注释,minspantree函数默认用Prim算法,如果要用Kruskal算法,按照上面代码格式设置参数即可。

至此,求解完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

还有糕手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值