通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵& F* Q, M5 E' G! l( u# t\" H
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
& E/ Q2 V0 p, k+ h- D/ v9 n - p=1;tb=2:length(a);9 h* w. }) E4 r& R
- while size(result,2)~=length(a)-1
+ o. n. `5 Z8 @2 W+ M\" O1 W0 w - temp=a(p,tb);temp=temp(:);
7 h; Q) Y/ t. `$ S1 q& p. y8 O9 L - d=min(temp);
! K3 T4 M' A m4 W - [jb,kb]=find(a(p,tb) == d,1);+ c( Q5 J\" {+ h$ C0 O& L. k) D
- j=p(jb);k=tb(kb);
% _; J( M5 R( t' B3 m' ~0 u; b0 w - result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];% b- p- w; V# u% U M+ v
- end+ c, P. H4 Y% S( h( v
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示, _% t* E: ], x9 i9 K$ L
result第一行表示起点,第二行表示终点,第三行表示权值
8 D5 u/ }2 I8 Z3 R8 T# i5 ?6 x) B+ Y8 J例如9 Z; e5 l. |. x$ s. E4 s/ e
result = - 1 2 5 4 4 7
2 t\" G4 e6 w' ]/ u9 l2 L( L - 2 5 4 6 7 33 y! U* `3 j2 F
- 50 40 10 30 42 45+ u. ~# w0 ^( I( Z3 d
- 起点就是1,终点是2距离50/ j' E @6 }; U
- 然后从2,到5距离40
$ I3 m4 d1 x0 ?. q - 从5到4距离10
& W4 U2 e& V6 g: h - 从4到6距离30
8 ~\" j( S& x. o% h - 从4到7距离42# A+ I, g1 h\" S! f9 p% p
- 从7到3距离45
& [! |& J' i, R - 最后生成完一整棵树
3 }- k3 s$ |/ U8 D* m) _9 u, ]\" E
复制代码
. E) a8 {5 \" W3 x9 P$ b |