通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵) [& T7 Y8 B9 H- d P
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值# d' I7 F7 S/ p- c6 d; Q5 A6 r
- p=1;tb=2:length(a);) O, U- [% s6 E
- while size(result,2)~=length(a)-1) U+ N( K! l: P0 _' r( p+ F
- temp=a(p,tb);temp=temp(:);, ^; L5 A5 O$ h6 [
- d=min(temp);! w* @! r8 u7 W4 U: r
- [jb,kb]=find(a(p,tb) == d,1);& x+ ?2 ^% k0 o3 ^
- j=p(jb);k=tb(kb);
' g: o% L; t2 n3 E - result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];: ]1 d$ j9 O\" D
- end8 `\" p* { \+ p5 @
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
. q. m# v7 h1 w1 a& q" Cresult第一行表示起点,第二行表示终点,第三行表示权值
/ j4 x9 `+ Y9 \7 _# L例如
- J% M# \ {: [* z2 `9 v1 ^' {result = - 1 2 5 4 4 7. Y8 s' p; g9 M- ?4 f) w
- 2 5 4 6 7 3
8 |! N, r) m( U0 d( X - 50 40 10 30 42 45
! e+ R% A5 v' {5 N7 P& e9 g4 m& O% u - 起点就是1,终点是2距离50
7 E4 j% V' {- z, l - 然后从2,到5距离409 y4 f6 Z% p0 H2 o\" T9 Y; u
- 从5到4距离106 A! {+ w\" Z: S
- 从4到6距离30
. ]4 @/ s9 z' M% a: F - 从4到7距离422 d, P: z: h2 e2 p* z X* R O- f
- 从7到3距离451 s6 B8 O' P3 A6 G
- 最后生成完一整棵树
. U- L; [8 b# z4 Q
复制代码 8 x9 u" ]' X l7 j# P4 x* h( l% X! ?
|