zoukankan      html  css  js  c++  java
  • 最小生成数 克鲁斯卡尔 普里姆 matlab

    克鲁斯卡尔:

    function   T=MST_Kruskal(G)
    n=0;
    if  isfield(G,'w')  && ~isempty(G.w)  &&  size(G.w,1)==size(G.w,2)
        W=G.w;n=size(W,1);
    end
    if  isfield(G,'e')  && ~isempty(G.e)  && size(G.e,2)==3
        E=G.e;  n=max(max(E(:,1:2));
    elseif n==0
        error('incorrect input argument');
    else
        E=[];
        for i=1:n
        for j=i+1:n
            if W(i,j)~=0  &&  W(i,j)~=inf 
                E=[E;  i  j  W(i,j)];
            end
        end
        end
    end
    
    T=[];
    m=0;
    C=1:n;
    while  m<n-1  &&  ~isempty(E)
        e=E(:,3);
        [minW, ind]=min(e);
        v1=E(ind,1);
        v2=E(ind,2);
        if  C(v1)~=C(v2)
            T=[T; E(ind,:)];
            m=m+1;
            C(C==C(v2))=C(v1);
        end
        E(ind,:)=[];        
    end
    

      普里姆:

    function   T=MST_Prim(G)
    n=0;
    if  isfield(G,'w')  && ~isempty(G.w)  &&  size(G.w,1)==size(G.w,2)
        W=G.w;n=size(W,1);
    end
    if  isfield(G,'e')  && ~isempty(G.e)  && size(G.e,2)==3
        E=G.e;  n=max(max(E(:,1:2));
    elseif n==0
        error('incorrect input argument');
    else
        E=[];
        for i=1:n
        for j=i+1:n
            if W(i,j)~=0  &&  W(i,j)~=inf 
                E=[E;  i  j  W(i,j)];
            end
        end
        end
    end
    
    V=1:n;
    U=[1];  V=setdiff(V,U);
    T=[];
    
    while  length(U)<n   
        EUV=[];
        for k=1:size(E,1)
            if  ismember(E(k,1), U) && ismember(E(k,2), U) ||  ~ismember(E(k,1), U) &&  ~ismember(E(k,2), U)
            else
                EUV=[EUV; E(k,:)];
            end
        end
        
        e=EUV(:,3);
        [minW  ind]=min(e);
        v1=EUV(ind,1);
        v2=EUV(ind,2);
        if  ismember(v1,U)  
            U=[U, v2];
        else
            U=[U, v1];
        end
        T=[T; v1 v2 minW];    
    end
    

      

  • 相关阅读:
    第二天课程档案
    第一天课程档案
    SAM初步
    计算几何初步
    数论二次总结
    生成函数入门题汇总
    1500: [NOI2005]维修数列
    20170214
    【bzoj2286】[Sdoi2011]消耗战
    bzoj2223: [Coci 2009]PATULJCI
  • 原文地址:https://www.cnblogs.com/wander-clouds/p/9351172.html
Copyright © 2011-2022 走看看