matlab 实现kruskal算法
function [T,v,c] =kruskal(b)
m=size(b,1);%图中的边数 后面的参数1是指所求矩阵维度的维数 ,1 2 3 维,
n = max(b(1:2*m));%图中的点数
[B,index]=sortrows(b,3);%对b进行排序
B=B'%转置
t = 1:n;
k=0;
T =[];
c =0;
for i=1:m
if t(B(1,i))~=t(B(2,i))%判断第i条边是否与树中的边形成圈
k=k+1;
T(1:2,k)=B(1:2,i);
c=c+B(3,i);
tmin=min(B(1,i),B(2,1));
tmax=max(B(1,i),B(2,i));
for j=1:n%将该边的两点标记,
if t(j)==tmax
t(j)=min(tmin,t(tmin));
end
end
end
if k==n-1
break;
end
end
v = zeros(n);
k=size(T,2);
for i=1:k
v(T(2*i-1),T(2*i))=1;
v(T(2*i),T(2*i-1))=1;
end