水木年华zzu 发表于 2009-10-16 20:59

最小数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

大笨象 发表于 2009-10-24 09:29

谢谢分享程序~

zhangkay 发表于 2010-7-24 09:24

谢谢分享程序~

qluther 发表于 2010-8-15 10:28

弱弱的问问楼主,a是什么矩阵

qluther 发表于 2010-8-15 12:41

程序好像有问题吧:只是把权矩阵中的最小值一次加入到tree_border中,没有管是否已经联通所有的点,或者是否构成圈了,希望LZ解答

gssrb 发表于 2010-8-16 22:14

dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd

效忠w手掌 发表于 2012-9-1 17:09

谢谢分享程序的人,

水木年华zzu 发表于 2012-9-9 10:52

qluther 发表于 2010-8-15 12:41 static/image/common/back.gif
程序好像有问题吧:只是把权矩阵中的最小值一次加入到tree_border中,没有管是否已经联通所有的点,或者是否 ...

找几个矩阵验算下就行了

小叮当1016 发表于 2013-4-30 09:42

谢谢分享程序~

朱鑫鑫 发表于 2014-8-7 10:35

...
页: [1]
查看完整版本: 最小数prim算法