求出下图的最小生成树

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

求出下图的最小生成树

解:MATLAB程序:

% 求图的最小生成树的prim算法。

% result的第一、二、三行分别表示生成树边的起点、终点、权集合

% p——记录生成树的的顶点,tb=V\p

clc;clear;

% a(1,2)=50; a(1,3)=60;

% a(2,4)=65; a(2,5)=40;

% a(3,4)=52;a(3,7)=45;

% a(4,5)=50; a(4,6)=30;a(4,7)=42;

% a(5,6)=70;

% a=[a;zeros(2,7)];

e=[1 2 20;1 4 7;2 3 18;2 13 8;3 5 14;3 14 14;4 7 10;5 6 30;5 9 25;5 10 9;6 10 30;6 11 30;7 8 2;7 13 5;8 9 4;8 14 2;9 10 6;9 14 3;10 11 11;11 12 30];

n=max([e(:,1);e(:,2)]); % 顶点数

m=size(e,1); % 边数

M=sum(e(:,3)); % 代表无穷大

a=zeros(n,n);

for k=1:m

a(e(k,1),e(k,2))=e(k,3);

end

a=a+a';

a(find(a==0))=M; % 形成图的邻接矩阵

result=[];p=1; % 设置生成树的起始顶点

tb=2:length(a); % 设置生成树以外顶点

while length(result)~=length(a)-1 % 边数不足顶点数-1

temp=a(p,tb);temp=temp(:); % 取出与p关联的所有边

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

result % 显示生成树(点、点、边长)

weight=sum(result(3,:)) % 计算生成树的权

程序结果:

result =

1 4 7 8 14 7 9 13 10 10 14 10 11 4 7 8 14 9 13 10

2 5 11

3 6 12 7 10 2 2 3 5 6 8 9 11 1

4 30 30 weight =

137

附图

最小生成树的权是137

相关文档
最新文档