通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵1 W, |\" s; l! O3 i4 Q
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
2 T3 q0 v6 J# X - p=1;tb=2:length(a);
/ M# s9 c+ m9 {8 |( w7 K( h - while size(result,2)~=length(a)-10 a; r& h5 {1 w- z+ M0 T
- temp=a(p,tb);temp=temp(:);
* q6 _, k8 v$ I - d=min(temp);
& u7 \% K! ?7 A3 }, o - [jb,kb]=find(a(p,tb) == d,1);. v* h5 c5 v: q& P- _0 e
- j=p(jb);k=tb(kb);! h9 s8 E% g. A' ^7 k
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
8 f& G\" r4 N. @$ n& _) A5 g- E - end
, q; P! D0 A' g& f- _6 o! p: K# H
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
3 m5 W& ]/ @( B+ U9 Y* X- G. Uresult第一行表示起点,第二行表示终点,第三行表示权值
; ]* @3 X8 u. a5 O3 ~& \8 J例如
9 y* U% c3 P+ _$ i, W, Tresult = - 1 2 5 4 4 73 j1 w\" j# M( D( j( }0 S
- 2 5 4 6 7 3
8 u ]! x! P' x2 E - 50 40 10 30 42 45* d7 f6 M p( r
- 起点就是1,终点是2距离50. E5 M. j% u- G! j\" |0 [
- 然后从2,到5距离40
+ M# t! C, @3 z: G9 E' I - 从5到4距离10
4 L* M4 J) ]9 x& {) s - 从4到6距离30) ^1 K u& B9 V4 _1 Y, _. G2 s
- 从4到7距离421 d1 K; V; ] T
- 从7到3距离45: ?/ Z: n- V6 J) F% d4 [
- 最后生成完一整棵树
0 M/ u: `8 N, Z0 ^- ]! q
复制代码 ) Q V8 }. k: `$ a: [% }2 q. T
|