通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵
# l' R2 j- W% m0 Z - result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
' g9 p. [+ `1 ~0 ~/ r. l - p=1;tb=2:length(a);
8 j4 S7 c2 N/ G% w - while size(result,2)~=length(a)-1
5 ~: G4 f7 A1 h' e4 p) P9 W- P - temp=a(p,tb);temp=temp(:);& M2 E! B) d& a7 b$ G; j
- d=min(temp);* s. K; ?- l5 g* j3 w; _7 t
- [jb,kb]=find(a(p,tb) == d,1);* ?) C: i1 |\" H$ t& N
- j=p(jb);k=tb(kb);4 f6 s; E5 `+ u# J t
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];; e! Q* i5 \9 t6 S5 Y8 a' j
- end& ]\" f3 D5 u\" ^7 z9 s0 T
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示$ c. y/ p" J1 l( X. h
result第一行表示起点,第二行表示终点,第三行表示权值7 w m7 z& b/ ~6 O# d7 @3 p9 ^& i
例如# E$ I* V6 I3 K1 c) v) R
result = - 1 2 5 4 4 7, G/ U* T- R4 {. h3 U6 ^8 F4 E; F
- 2 5 4 6 7 3
5 p5 @/ O( e/ _. g\" X. L - 50 40 10 30 42 458 y: d' x2 q6 l+ i$ H\" ?! |6 M
- 起点就是1,终点是2距离50
c3 P9 s+ Z! _5 [1 l y - 然后从2,到5距离40
- r2 M2 L F$ Z R\" O - 从5到4距离10) e3 H\" a( d/ f3 u- e5 X' a' A
- 从4到6距离30
% f4 z- L- G+ m4 `, v+ z\" Y - 从4到7距离42# \4 X( U V0 U# m% y9 W
- 从7到3距离45
( l2 S- X6 l& p! b - 最后生成完一整棵树
; G2 S+ ?$ N% @
复制代码
2 E, ?9 e% ]# f. y/ ^9 b- m |