通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵
8 v# ]8 X+ f2 Q+ g: ~, k8 B - result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
# B% c& g& f; |9 C; L0 h, o* t# y - p=1;tb=2:length(a);% X* h8 K$ J) J. o4 R
- while size(result,2)~=length(a)-1
5 L& Q& a9 r1 A0 [. I - temp=a(p,tb);temp=temp(:);
+ V2 F' v* r/ K# [ - d=min(temp);
' c1 J6 G+ k, M- G- g* ` - [jb,kb]=find(a(p,tb) == d,1);( h! k8 p# z: P4 p
- j=p(jb);k=tb(kb);+ S# S# V: [' L \. D4 N* N
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];# ]8 W1 ~4 y7 A2 }# t! y
- end. i$ F$ E9 I: B0 m: I
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
; C1 \9 ^; I( |! s. L! Y: K3 kresult第一行表示起点,第二行表示终点,第三行表示权值2 L7 g0 J: j: [% k0 j
例如9 n/ A& j1 P m6 N. W7 x
result = - 1 2 5 4 4 7
; u; d+ ]+ \! N+ s# B; i6 Y - 2 5 4 6 7 3
, `/ Y\" Z1 [1 N( {, O - 50 40 10 30 42 45
! A0 {; s4 G1 E; ` - 起点就是1,终点是2距离50
8 o! X% H, T1 ~, b- x& E: e4 G' @ - 然后从2,到5距离40' ]5 L c$ e: D- H& F: T' H; g+ Y* m
- 从5到4距离10
4 E9 G# G4 I& X% @9 r! x9 l: W - 从4到6距离30* h+ q) t, o/ C# X/ t/ a
- 从4到7距离429 c g: Y8 v& f! @2 _, d1 h( Y
- 从7到3距离45; e3 d9 Y2 \% s! w) J
- 最后生成完一整棵树
1 S\" e& g2 P3 A; q, O6 b8 v
复制代码
/ Q h0 o& g8 {9 \" ?: y. R- g |