美赛(matlab自学)之图与网络(自用)

最小生成树问题

基础知识

连通的无圈图叫做树
度为1的顶点叫做叶子顶点

例题

在这里插入图片描述

prim算法
clc;clear ;
a = zeros(7);%7行7列零矩阵
a(1,2) =50; a(1,3) =60;
a(2,4) =65; a(2,5) =40;
a(3,4) =52;a(3,7) =45;
a(4,5) =50; a(4,6) =30;a(4,7) =42;
a(5,6) =70;
a=a+a';
a(a==0)= inf;
result =[];
p=1;
tb=2:length(a);
while size(result,2) ~=length(a) -1
    temp = a(p,tb) ;temp = temp(:);
    a =min( temp);
    [jb,kb] = find(a(p,tb)==d,1);%找第1个最小值
     j =p(jb);
    k=tb(kb);
    result =[ result,[j;k;d]];
    p=[p,k];
    tb( find(tb==k))=[];
end
result

书上的模板代码,但是不知道为什么运行结果显示超出了矩阵维度??
只能以后再解决了……

kruskal算法

clc;clear;
a(1,[2,3]) =[50,60]; a(2,[4,5])=[65,40];%这里给出邻接矩阵的另外一种输入方式
a(3,[4,7]) =[52 ,45]; a(4,[5,6]) =[50,30];
a(4,7) =42; a(5,6) =70;
[i,j,b] =find(a); %行,列,值
data=[i';j' ;b'];
index = data(1:2,:);
loop=length(a)-1;
result=[];
while length( result) < loop
temp = min( data(3,:));
flag=find(data(3,:)==temp);
flag= flag(1);
v1 = index(1, flag);v2 = index(2,flag);
if v1~=v2
result=[result,data(:,flag)];
end
index(find(index==v2))=v1;
data(:,flag)=[];
index(:,flag) =[];
end
result
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值