归功于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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?