通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵# \# e( S- Z$ w( Z8 I' K
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
# i& h* l8 [/ d; A0 \& |7 Q - p=1;tb=2:length(a);
# x( G% ?. P0 x! E' _ - while size(result,2)~=length(a)-1- V: }: F0 K) n$ A. l5 Z* e1 T
- temp=a(p,tb);temp=temp(:);
$ M1 q4 o% w\" K) Z9 \1 X - d=min(temp);
2 \% c, d7 \7 ^) u5 F8 _6 I) m6 A - [jb,kb]=find(a(p,tb) == d,1);
8 E4 Y5 I( }! x7 Q\" c7 t9 a - j=p(jb);k=tb(kb);/ y) a! l7 B `6 W: c3 ~/ s
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];5 e4 R4 e7 |5 I\" x5 x
- end4 X2 Q( K9 n; ]) d\" }5 K( V
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
7 l: k: y6 Q6 @+ E+ zresult第一行表示起点,第二行表示终点,第三行表示权值7 C+ H: o r1 ?* e2 D; d. z0 H$ _
例如+ ?- p$ Y2 D2 I; U8 V
result = - 1 2 5 4 4 7
, p) |1 ?0 z3 }) t - 2 5 4 6 7 33 J8 \. `; c+ c
- 50 40 10 30 42 450 T7 l: k8 L' p
- 起点就是1,终点是2距离50. y/ v\" [* x' Q. S1 u$ ~
- 然后从2,到5距离40
1 F$ D% u+ z5 k\" {5 m - 从5到4距离10
; Z. X: x6 I9 z( l - 从4到6距离30! P\" q2 R1 y, ~5 z0 C8 S9 o/ J2 o
- 从4到7距离42
# Z+ d\" I: N2 i6 C+ Y$ _9 T - 从7到3距离457 X* m& C( }: L
- 最后生成完一整棵树! X Z' b2 l- ?9 K
复制代码
; h8 ?4 G4 h8 | |