通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵9 q$ J& \2 m5 ~+ i$ ^, H7 y5 q! A
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
6 Y. E! Q9 e' [8 i; l) s- Z5 U - p=1;tb=2:length(a);
! i\" `7 k: D& j a - while size(result,2)~=length(a)-1
5 b, P, Q8 v8 c' t; l _ - temp=a(p,tb);temp=temp(:);
. ~5 v4 u/ G' a6 ^% N - d=min(temp);+ f( {7 o, h* M' B; n\" R7 {% \
- [jb,kb]=find(a(p,tb) == d,1);
; f U6 Y5 t2 {' o# X* a6 F9 @ - j=p(jb);k=tb(kb);
) X% S* K+ }3 `5 I; |; t - result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];: Z! F4 K6 [) z
- end9 D# ^( ^. F& z
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
" I- T- _. e( @9 ?% B( D- @7 }) B3 Hresult第一行表示起点,第二行表示终点,第三行表示权值2 Q. |. H1 o6 p3 |
例如% I. o: X7 ?& ~, g* {+ i) s
result = - 1 2 5 4 4 7
9 I6 N/ c4 I( ^ - 2 5 4 6 7 3
\" z) D5 c5 l: m/ F, E: r - 50 40 10 30 42 456 m/ |. V\" C4 h\" U2 y; S
- 起点就是1,终点是2距离50- P- c/ W# P; V y' B {$ i
- 然后从2,到5距离40- X% [' k* y, d8 ?1 [. g
- 从5到4距离103 e/ N$ C8 r# u' D. _! H2 H3 u6 v# v
- 从4到6距离30% i5 [# t' Z\" l) e4 Y; h9 ~
- 从4到7距离42
% N$ K4 v2 R* E* O% l$ D9 u - 从7到3距离45
9 E\" x: i. Z, j% |! C6 m - 最后生成完一整棵树
' I7 ]6 l' D6 w# m' G( A
复制代码 . @2 J. |/ U* `6 }, i( n
|