matlab練習程序(Prim最小生成樹)


算法步驟:

1.任意找一頂點加入樹中。

2.尋找所有與樹相鄰的元素,並取其邊權重最小的並且不在樹中的元素入樹。

3.繼續第二步,直到所有元素都入樹。

效果和Kruskal算法是類似的。

matlab代碼:

main.m

clear all;
close all;
clc;

G=[0 4 0 0 0 0 0 8 0;
   4 0 8 0 0 0 0 11 0;
   0 8 0 7 0 4 0 0 2;
   0 0 7 0 9 14 0 0 0;
   0 0 0 9 0 10 0 0 0;
   0 0 4 14 10 0 2 0 0;
   0 0 0 0 0 2 0 1 6;
   8 11 0 0 0 0 1 0 7;
   0 0 2 0 0 0 6 7 0];

[m n]=size(G);

q=[1];      %已經被標記的元素
k=1;        %已經標記的元素個數
A=[];       %最后產生的最小生成樹
while length(q)~=m
    e=[];
    for i=1:k
        for j=1:n
            if G(q(i),j)~=0 && ~biaoji(j,q) %不在數中的元素
                e=[e;G(q(i),j) q(i) j];
            end
        end
    end
    
    [junk index]=min(e(:,1));    %求與當前標記的所有元素相鄰的權重最小的邊的索引
    A=[A;e(index,:)];       %最小生成樹的三元組表示
    q=[q e(index,3)];
    k=k+1;  
end

biaoji.m

function re=biaoji(j,biao)  %判斷j點是否已被標記
    l=length(biao);
    for i=1:l
       if j==biao(i) 
            re=1;
            return;
       end
    end
    re=0;
    return;
end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM