通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵
& L: N% I; o4 t9 S) G3 d - result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值 y4 W! g: n( u5 M; x
- p=1;tb=2:length(a);# N. h& `\" O% O3 ~# h: g z. }! c
- while size(result,2)~=length(a)-1
: p0 o; l; X( I9 ~7 B/ M0 r; `! n - temp=a(p,tb);temp=temp(:);; T3 ?' o; ]( v \/ r
- d=min(temp);
; g- D2 w- _! `- c* K - [jb,kb]=find(a(p,tb) == d,1);
' d8 d2 t ], R6 w; J/ `0 [2 S - j=p(jb);k=tb(kb);$ I: ^5 C! @* y6 Y) q% h
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];3 c- Y) I5 C! ]+ N\" V
- end
7 v: g$ H8 }' s2 {- {* x6 y
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示3 \, ~ c6 t1 R: O; {# b* v
result第一行表示起点,第二行表示终点,第三行表示权值9 F: s0 a/ w0 Z. L
例如9 [2 }$ k$ r+ u3 x- c3 t; m$ H. r
result = - 1 2 5 4 4 7* A6 E$ v) {6 {6 o$ X1 l& ~
- 2 5 4 6 7 3# Y! W! G( d5 U\" g8 V3 y2 [
- 50 40 10 30 42 451 c4 C3 K, W# A7 `
- 起点就是1,终点是2距离50
. o$ \7 z1 q8 K! t* K6 w - 然后从2,到5距离40
# C3 X$ z v# u - 从5到4距离10
+ U3 L% ?4 h/ O. o0 K, E- v& D+ [ - 从4到6距离308 h2 s% B# T* \2 s- _
- 从4到7距离42
) C9 }+ C: ~, B4 ?6 s. X - 从7到3距离45
8 p/ T5 z E5 f) R$ Y - 最后生成完一整棵树
6 }\" Z% P) e3 @! `; p0 }, ~
复制代码 % G. u% U* K1 `/ q
|