通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵
) I8 I0 q' E, N9 l - result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值, H& r8 p2 r1 v
- p=1;tb=2:length(a);
a$ A! P7 Q6 C% f' x! F% B - while size(result,2)~=length(a)-1& @% X4 x& I/ [& O2 v6 z
- temp=a(p,tb);temp=temp(:);
- l; G7 {. M7 V& A& t - d=min(temp);/ A% ~1 c\" i. N
- [jb,kb]=find(a(p,tb) == d,1);
! R0 F. k, k- ?8 M - j=p(jb);k=tb(kb);
6 w$ F. b+ ]: i: k - result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
\" d- m0 B* C- Y/ C) Z - end
. F0 k; A/ S' P) o3 E, g
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
8 T1 o# |5 a3 Z+ u; O% Z" yresult第一行表示起点,第二行表示终点,第三行表示权值
! E0 \/ m3 s$ F, K# M2 S- M$ c, C. w例如4 |7 Y& }1 o$ y4 D1 A/ C \
result = - 1 2 5 4 4 7
7 Q0 \* V8 P+ ^) i- [% F - 2 5 4 6 7 3
7 |$ t3 O9 G9 b9 e4 t8 u - 50 40 10 30 42 45
& {, Q* m, a8 @9 L2 ^ - 起点就是1,终点是2距离50
/ @4 |- m* E7 [+ x+ e - 然后从2,到5距离40, N% d* O2 X8 J9 j
- 从5到4距离10
: [/ A, Z. [: x g9 z - 从4到6距离30; Z; x$ T. q$ d) \( B
- 从4到7距离42
, w; b3 b% P$ g; S( X6 g - 从7到3距离45+ P5 x/ n/ D/ H U4 L3 Z# X
- 最后生成完一整棵树
/ f) A3 {: r/ B( ?6 I4 w& g\" F
复制代码 . T8 y- O; G4 U v+ n) h8 z
|