网络分析中的最小代价生成树算法(MATLAB)

      使用MATLAB中的函数minspantree来实现Prim算法和Kruskal算法进行最小代价树的生成,使用plot绘制原始树(蓝色),highlight来表示最小生成树的结果(红色)。

目录

一、准备

二、代码

(1)Kruskal算法

(2)Prim算法

三、结果

(1)原始生成树结果

(2)Kruskal算法结果

(3)Prim算法结果

四、说明

一、准备

(1)随机数据。

(2)MATLAB 2022b(其他版本也可以)。

(3)新建脚本文件。

二、代码

(1)Kruskal算法

s=[1,1,1,2,2,2,3,3,4,4,5,5,6];
t=[2,3,4,5,3,6,5,7,5,6,6,7,7];
w=[35,24,10,25,14,34,6,11,12,30,15,25,21];

names={'1','2','3','4','5','6','7'};
G=graph(s,t,w,names);
p=plot(G,"EdgeLabel",G.Edges.Weight);
% 求解最小生成树
T=minspantree(G,"Method","sparse");
% sparse代表的是Kruskal算法
p=plot(G,"EdgeLabel",G.Edges.Weight);
highlight(p,T,"NodeColor","red","EdgeColor","red"); 
% 将最小生成树的边设置为红色
title("Kruskal算法");

(2)Prim算法

s=[1,1,1,2,2,2,3,3,4,4,5,5,6];
t=[2,3,4,5,3,6,5,7,5,6,6,7,7];
w=[35,24,10,25,14,34,6,11,12,30,15,25,21];

names={'1','2','3','4','5','6','7'};
G=graph(s,t,w,names);
p=plot(G,"EdgeLabel",G.Edges.Weight);
% 求解最小生成树
T=minspantree(G,"Method","dense");
% dense代表的是Prim算法
p=plot(G,"EdgeLabel",G.Edges.Weight);
highlight(p,T,"NodeColor","red","EdgeColor","red"); 
% 将最小生成树的边设置为红色
title("Prim算法");

三、结果

(1)原始生成树结果

(2)Kruskal算法结果

(3)Prim算法结果

四、说明

    注意:若在生成最小代价树的过程中,若在最小代价树生成过程中出现多个边权值相等的情况,那么就随机选择其中的一条边。

    Kruskal算法的核心思想是贪心思想,通过局部最优达到整体最优:

  • 将所有的边权进行排序。
  • 不断迭代选择权最小的边,直到所有的点被连起来(边数=节点数-1)。
  • 在迭代期间,如果边构成环,就要丢弃该边,因为树中是不存在环的。

(需要完整代码及运行结果请留言~

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值