数学建模(14)——MATLAB实现最小生成树(Prim与Kruskal算法)
2017-09-06 21:14
1331 查看
Prim算法
连通赋权图如上
邻接矩阵如下
0 50 60 0 0 0 0
0 0 0 65 40 0 0
0 0 0 52 0 0 45
0 0 0 0 50 30 42
0 0 0 0 0 70 0
function [result]=prim(a); % 输入:a—邻接矩阵,a(i,j)是指i到j之间的权值 % 输出:result—第一、二、三行分别代表最小生成树边的起点、终点、权集合 a(a==0)=inf; result=[];p=1;tb=2:length(a); while size(result,2)~=length(a)-1 temp=a(p,tb);temp=temp(:); d=min(temp); [jb,kb]=find(a(p,tb)==d); j=p(jb(1));k=tb(kb(1)); result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[]; end end
Kruskal算法
function [result]=kruskal(a) % 输入:a—邻接矩阵,a(i,j)是指i到j之间的权值 % 输出:result—第一、二、三行分别代表最小生成树边的起点、终点、权集合 [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 end
相关文章推荐
- 最小生成树算法——Prim和Kruskal算法的实现
- 用Prim和Kruskal算法实现图的最小生成树
- 最小生成树,Prim,Kruskal算法主要思想,证明及C++实现
- hdoj 继续畅通工程 Kruskal算法实现最小生成树
- 最小生成树之Kruskal算法的实现
- 最小生成树--Prim和Kruskal算法
- 最小生成树prim java 实现
- 【数学建模集训系列】公交查询系统的matlab实现-问题重述
- 数据结构之---C语言实现最小生成树之prim(普里姆)算法
- 最小生成树-Kruskal算法 java代码实现
- 【算法——04】最小生成树——Prim和Kruskal算法
- Java实现最小生成树Kruskal算法
- 图——Prim最小生成树算法(矩阵方式实现)
- 最小生成树的Prim算法和Kruskal算法java代码实现
- 最小生成树(Prim和Kruskal算法)
- zoj 1203求最小生成树的权值之和(kruskal算法实现)
- 【数学建模集训系列】公交查询系统的matlab实现-公交站点和线路对应矩阵
- 【数学建模集训系列】公交查询系统的matlab实现-只含公交的查询
- (c++)数据结构与算法之图:邻接矩阵、深度广度遍历、构造最小生成树(prim、kruskal算法)
- 最小生成树-Kruskal算法 java代码实现