关于matlab gui实现最小生成树演示过程
答案:1 悬赏:60 手机版
解决时间 2021-11-09 03:36
- 提问者网友:留有余香
- 2021-11-08 14:21
关于matlab gui实现最小生成树演示过程
最佳答案
- 五星知识达人网友:逐風
- 2021-11-08 15:53
function [T,WT]=prim(A)
%Prim法求最小生成树
%A为无向图G={V,E}的权矩阵;
%T为A的最小生成树的权矩阵,WT为其权值。
n=length(A);
A(find(A==0))=inf;
T=zeros(n);WT=0;
V=2:n;%未通过点的集合
V1=1;%通过点的初始集合
p=1;%记录通过点的个数.
i=1;[y,k]=min(A(i,:));%{从以1为一个端点,以V中的点为另一个端点的所有边中,找出权值最小的边%}
p=p+1;V1(p)=k;%将找到的点加到V1中
V(k-1)=[];T(i,k)=y;T(k,i)=y;%将找到的点从V中删去,并把相应边加到T中。
WT=WT+y;A(i,k)=inf;A(k,i)=inf;
while p s=1;
for i=V1 %找出临跨V1和V的权值最小的边
y(s)=min(A(i,V));s=s+1;
end
y=min(y);%y为找出的最小权值
for i=V1 %找出与y相关联的两个点
for j=V
if(A(i,j)==y)T(i,j)=y;T(j,i)=y;A(i,j)=inf;A(j,i)=inf;WT=WT+y;
p=p+1;V1(p)=j;%将点加到V1中
V(find(V==j))=[];%将通过点从V中删掉
end
break;end;end;end
end
%可以在MATLAB中输入以下命令进行检验:
A=[inf 4 15 inf 7 inf 28;4 inf 9 inf inf inf inf;15 9 inf 25 5 inf inf;inf inf 25 inf 32 16 12;7 inf 5 32 inf inf 30;inf inf inf 16 inf inf 20;28 inf inf 12 30 20 inf];
[T,WT]=prim(A)追问大神,你这个程序是符合我上面说的要求的程序么- -!运行不对啊,还是我运行错了。。。还是你从哪copy的一份呢?
%Prim法求最小生成树
%A为无向图G={V,E}的权矩阵;
%T为A的最小生成树的权矩阵,WT为其权值。
n=length(A);
A(find(A==0))=inf;
T=zeros(n);WT=0;
V=2:n;%未通过点的集合
V1=1;%通过点的初始集合
p=1;%记录通过点的个数.
i=1;[y,k]=min(A(i,:));%{从以1为一个端点,以V中的点为另一个端点的所有边中,找出权值最小的边%}
p=p+1;V1(p)=k;%将找到的点加到V1中
V(k-1)=[];T(i,k)=y;T(k,i)=y;%将找到的点从V中删去,并把相应边加到T中。
WT=WT+y;A(i,k)=inf;A(k,i)=inf;
while p
for i=V1 %找出临跨V1和V的权值最小的边
y(s)=min(A(i,V));s=s+1;
end
y=min(y);%y为找出的最小权值
for i=V1 %找出与y相关联的两个点
for j=V
if(A(i,j)==y)T(i,j)=y;T(j,i)=y;A(i,j)=inf;A(j,i)=inf;WT=WT+y;
p=p+1;V1(p)=j;%将点加到V1中
V(find(V==j))=[];%将通过点从V中删掉
end
break;end;end;end
end
%可以在MATLAB中输入以下命令进行检验:
A=[inf 4 15 inf 7 inf 28;4 inf 9 inf inf inf inf;15 9 inf 25 5 inf inf;inf inf 25 inf 32 16 12;7 inf 5 32 inf inf 30;inf inf inf 16 inf inf 20;28 inf inf 12 30 20 inf];
[T,WT]=prim(A)追问大神,你这个程序是符合我上面说的要求的程序么- -!运行不对啊,还是我运行错了。。。还是你从哪copy的一份呢?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯