通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵0 }5 b# U8 ?( I4 d/ o3 C; T; \
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
2 X z+ }. w( |3 f! F9 D - p=1;tb=2:length(a);4 a0 {$ v/ l) E% D5 h
- while size(result,2)~=length(a)-1
. H2 y$ g6 I! X& `# e: p - temp=a(p,tb);temp=temp(:);
1 {9 h0 j0 E8 v. M) a _ - d=min(temp);
7 A. s' j/ m) C/ A - [jb,kb]=find(a(p,tb) == d,1);5 r/ c8 g3 g6 |* g$ s) e0 N& D7 w9 i
- j=p(jb);k=tb(kb);+ l/ A* D. z, W6 p! e! M& |/ h2 T4 q
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];5 J# b: ]7 ]' k, v$ `1 |. Y7 q8 j0 Q
- end9 x7 A& {2 g( k* q
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示$ y3 }( q |9 v* p: S
result第一行表示起点,第二行表示终点,第三行表示权值) c3 Y3 I0 V+ I
例如
5 F3 z* E/ S6 Y: ?) Zresult = - 1 2 5 4 4 7
. W8 |\" {, ?6 m8 O - 2 5 4 6 7 3
( C$ C# Z8 D( y* D - 50 40 10 30 42 45
. x# R; ~3 k2 F u - 起点就是1,终点是2距离50
+ y, { l9 Q' m; D3 X - 然后从2,到5距离40
. V/ o) g/ l\" c - 从5到4距离10
. {! j/ z! p3 F5 p1 W2 L+ v D c - 从4到6距离30
6 p! M- B0 p9 [ - 从4到7距离42
* p, J- a/ \' \: x8 a& Z+ a/ v - 从7到3距离45/ z8 V, m) c' x8 P3 l
- 最后生成完一整棵树
2 l3 y4 H, v) _# a/ h
复制代码 / M5 q$ Z$ _6 H9 k) g! R) I# ^
|