通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵
# H* n\" s( o4 { {3 z - result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
\" Y+ H5 m, K+ F4 ~/ ` - p=1;tb=2:length(a);
0 w, v! ~# |- z5 K+ U c( E# j) c - while size(result,2)~=length(a)-18 f' O5 I! V9 m$ F1 V; S3 v T
- temp=a(p,tb);temp=temp(:);' |- ]3 m- h* o8 }4 A- [
- d=min(temp);
- G3 V, i; V9 b) _( y. x3 J - [jb,kb]=find(a(p,tb) == d,1);
0 v5 u! H: S4 ]( b& _) P2 W; M - j=p(jb);k=tb(kb);
5 F. ~' N$ q2 ~! d9 M; b3 O% Q - result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
! b. q& o8 X% T - end F$ D% ]* x( _7 |/ N
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示5 s1 W% G* c: F6 |, T, Q
result第一行表示起点,第二行表示终点,第三行表示权值6 b$ e2 f) C- C2 M+ Q8 z& {
例如- O" e6 m' X- J- ?! i ^
result = - 1 2 5 4 4 7
3 F' l6 m e\" ]7 w - 2 5 4 6 7 3
# u# s3 y% T' j* y; |3 n* s2 J - 50 40 10 30 42 45
3 S! A2 `\" \* k& m - 起点就是1,终点是2距离50
$ J% T& s( C$ v/ t& @. U0 Y O - 然后从2,到5距离402 b9 y\" c4 A& [& `! @- z8 s
- 从5到4距离10. W6 y N4 P- I7 N# t+ m l+ A9 x
- 从4到6距离302 P! ~0 f7 h! ]7 ~! C; D
- 从4到7距离421 v6 p2 X0 T( E8 I\" P& g\" k
- 从7到3距离45' z\" r8 K6 H. s& \. ]! _
- 最后生成完一整棵树+ o2 e! I\" P* ?\" w1 w# j! M ]1 P
复制代码
- K t+ R# x& N2 J# C; F2 c" ` |