通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵
1 u' J* g \\" ?4 i - result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
/ `+ L* e, [; v - p=1;tb=2:length(a);. e# }) Z1 L7 j5 [
- while size(result,2)~=length(a)-1
' |1 _: c, u6 p - temp=a(p,tb);temp=temp(:);3 C9 s9 e: c. Z4 s9 Y& _$ f, E( L2 W/ L
- d=min(temp);
- [6 ^% Y1 O9 v% t; P - [jb,kb]=find(a(p,tb) == d,1);4 e2 U. O/ G. E( i! m$ O2 @
- j=p(jb);k=tb(kb);& ^$ D% t& |4 c+ Z* S
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[]; e% c2 U f h4 [8 r7 } o
- end' } A) [- p; I. ?+ m- p! X
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
; J& E: i" p3 g, I3 B! U" u+ g6 kresult第一行表示起点,第二行表示终点,第三行表示权值" q; A0 k2 c. I+ E
例如8 ~ `' J7 J9 s% X C, O
result = - 1 2 5 4 4 7
! i\" ]! W) I6 i' a8 P4 ~ - 2 5 4 6 7 3 L- c\" |. w! N; q9 f1 f/ p
- 50 40 10 30 42 45+ B' q5 \\" J' H
- 起点就是1,终点是2距离50) n# Z( [( M+ a( @) d0 w' ^\" N' R
- 然后从2,到5距离40
; u8 r9 N( P2 b* M: `0 T- j - 从5到4距离10; O/ f( W* H, {. e& ]
- 从4到6距离30
% \. O$ d\" M, K3 V: K - 从4到7距离42) W: |8 P6 q; ~% _! ~1 |; f+ ~# z
- 从7到3距离454 @ Y\" b. [( c: m/ _1 v% g4 d
- 最后生成完一整棵树5 V. _\" B \* s3 h% P$ Y- Z
复制代码
9 o! q2 C1 o* Z% Q f! n ~ |