您当前的位置: 首页 >  搜索

slandarer

暂无认证

  • 1浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Matlab 最小生成树(可设置搜索起点)

slandarer 发布时间:2020-05-02 20:41:34 ,浏览量:1

归功于matlab 强大的矩阵运算 该程序可只使用一层循环 程序总长度为17行 完整代码(附带解释)

function [Tree,Dis]=MinSpanTree(adjMat,sPoint)
S=sPoint;          %已经取到的节点集
N=size(adjMat,1);  %节点总数
Mat=adjMat;        %用作计算的邻接矩阵(为了不改变原矩阵)
Mat(Mat==0)=inf;   %将矩阵为0的值调整为inf
Tree=zeros(N-1,2); %以sPoint为起点的最小生成树
Dis=zeros(N-1,1);  %最小生成树每一分支长度
for i=1:N-1
    Mat(:,S)=inf;                %将通向已在节点集的点的路径长度设置为inf(防止点被二次取到)
    tempMat=Mat(S,:);            %节点集S中的点到其他节点距离
    MinNum=min(min(tempMat));    %找到当前最短距离
    [m,n]=find(tempMat==MinNum); %找到当前最短距离对应是哪条路
    Tree(i,:)=[S(m(1)),n(1)];    %将最短路添加到树
    Dis(i)=adjMat(S(m(1)),n(1)); %将最短距离添加到距离
    S=[S,n(1)];                  %将新的节点添加到已取到节点
end
end

如果将其改成不设置搜索起点的最小生成树,只需要加个nargin判断。

function [Tree,Dis]=MinSpanTree(adjMat,sPoint)
Mat=adjMat;        %用作计算的邻接矩阵(为了不改变原矩阵)
Mat(Mat==0)=inf;   %将矩阵为0的值调整为inf
if nargin            
关注
打赏
1664692598
查看更多评论
0.1649s