通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵! e( C% i n% A5 t$ k; P
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值4 `, g1 g; p. P; c9 W# T9 Q
- p=1;tb=2:length(a);% W, f, B- {# S2 p8 a
- while size(result,2)~=length(a)-1# M4 Z6 u$ U; W% t
- temp=a(p,tb);temp=temp(:);
9 S\" V+ @( j7 m/ M7 W# g* ~ x - d=min(temp);6 s, ^9 v/ y% l
- [jb,kb]=find(a(p,tb) == d,1);
9 H: f+ X- b% ^ - j=p(jb);k=tb(kb);/ Z. i: K8 I5 D8 A% a; P7 q R% S
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];. P9 F0 L2 o/ J3 ]\" l% l
- end
0 U5 P* S) B7 J) B' x
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示8 `; K& L3 _4 ^+ G
result第一行表示起点,第二行表示终点,第三行表示权值4 C: O2 A+ ^+ f9 @( B- O
例如
8 ]+ F- |+ J/ |4 V3 kresult = - 1 2 5 4 4 7
) Q& E5 E* Z6 P0 s( e - 2 5 4 6 7 30 f8 R3 H' H: d1 w2 {( c9 O
- 50 40 10 30 42 45/ C3 y+ N1 T! {$ G! E0 B
- 起点就是1,终点是2距离508 n& ~; w0 m# u
- 然后从2,到5距离40
' m\" }8 o& q+ ~' \8 b - 从5到4距离10
. M3 G! k$ C! j) M0 Q5 Z1 Z5 n - 从4到6距离30
: M8 R E' Z7 ~7 {5 q& R { - 从4到7距离42% I0 } t' Y- D. G& F( d5 [
- 从7到3距离45& ?3 n4 o3 P0 F
- 最后生成完一整棵树* T( [6 J- E* s% Y
复制代码 9 z8 ~$ U2 {( M& r* L7 P
|