最小生成树问题
基础知识
连通的无圈图叫做树
度为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