最小数prim算法
求最小树的prim算法说明:tree_border 向量中相邻的两个元素为边的顶点,例如,第1个元素和2个元素为一条边的两个顶点,第3个元素和第4个元素为一条边的两个顶点,依次内推,将个跳边连起来就形成了最小生成树。
function =min_tree(a)
n= size(a,1);
a_copy=a;
for i= 1:n
for j=i:n
a_copy(i,j)=inf;
end
end
tree_martix=zeros(n,n);
count=0;
tree_node=zeros(2*n,1);
i=1;
while count<=n-2
b=min(min(a_copy));
=find(a_copy==b);
flag=node_judge(tree_node,index_x,index_y);
if flag==1
a_copy(index_x,index_y)=inf;
a_copy(index_y,index_x)=inf;
continue;
end
tree_node(i)=min(index_x);
tree_node(i+1)=min(index_y);
i=i+2;
%a_copy(index_x,index_y)=inf;
%a_copy(index_y,index_x)=inf;
tree_martix(index_x,index_y)=a_copy(index_x,index_y);
a_copy(index_x,index_y)=inf;
a_copy(index_y,index_x)=inf;
count=count+1;
end
tree_border=tree_node;
-----------------------------
function flag=node_judge(tree_node,index_x,index_y)
flag=0;
n=length(tree_node);
flag_x=0;
flag_y=0;
for i= 1:n
if tree_node(i)==index_x
flag_x=1;
end
if tree_node(i)==index_y
flag_y=1;
end
end
if flag_x==1&&flag_y==1
flag=1;
end 谢谢分享程序~ 谢谢分享程序~
弱弱的问问楼主,a是什么矩阵 程序好像有问题吧:只是把权矩阵中的最小值一次加入到tree_border中,没有管是否已经联通所有的点,或者是否构成圈了,希望LZ解答 dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd 谢谢分享程序的人, qluther 发表于 2010-8-15 12:41 static/image/common/back.gif
程序好像有问题吧:只是把权矩阵中的最小值一次加入到tree_border中,没有管是否已经联通所有的点,或者是否 ...
找几个矩阵验算下就行了 谢谢分享程序~ ...
页:
[1]