算法步驟:
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