最小生成树matlab代码Kruskal算法,用于二维网络生成

Posted 墨叔叔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小生成树matlab代码Kruskal算法,用于二维网络生成相关的知识,希望对你有一定的参考价值。

一、Kruskal算法

        克鲁斯卡尔算法(Kruskal)是一种使用贪婪方法的最小生成树算法。 该算法初始将图视为森林,图中的每一个顶点视为一棵单独的树。 一棵树只与它的邻接顶点中权值最小且不违反最小生成树属性(不构成环)的树之间建立连边。

二、具体效果

 

最小生成树法生成网络

三、代码

clc
clear
close all
P=[20,100;3,31;83,44;93,19;77,14;85,44;18,35;84,39;18,49;37,46;9,86;46,85;68,40;9,5;45,15;23,89;5,40;44,61;72,50;46,68];
%计算距离矩阵
D=inf*ones(size(P,1),size(P,1));
for i=1:size(P,1)-1
    for j=i+1:size(P,1)
            D(i,j)=norm(P(i,:)-P(j,:));
    end
end
plot(P(:,1),P(:,2),'.k','MarkerSize',20)
hold on
%Kruskal算法
temp=[];   %已经选择的节点
while size(unique(temp),1)<size(P,1)
    %寻找最短的边
    [xx,yy]=find(D==min(min(D)));
    ii=xx(1);
    jj=yy(1);
    %判断ii和jj加进去是否成环
    io=judge(P,temp,ii,jj);
    if io==0
        temp=[temp;ii,jj];
        plot([P(ii,1),P(jj,1)],[P(ii,2),P(jj,2)],'-b')
        hold on
        pause(0.1)
    end
    D(ii,jj)=inf;
end

以上是关于最小生成树matlab代码Kruskal算法,用于二维网络生成的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB最小生成树Kruskal算法

数据结构与算法—并查集Kruskal算法求最小生成树

最小生成树Kruskal算法

最小生成树详解 prim+ kruskal代码模板

(最小生成树)Kruskal算法

最小生成树及Prim算法及Kruskal算法的代码实现