通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵) X6 e0 S; b8 f3 I9 y
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值. |% o& u3 P) h: d4 X5 } q
- p=1;tb=2:length(a);. j1 V2 m# W# G0 g& ]' b9 Z
- while size(result,2)~=length(a)-1
$ w- Z. {6 |, m5 q - temp=a(p,tb);temp=temp(:);
1 f4 h- w' d* q U1 W - d=min(temp);/ ]# p* G+ `! Z; A& P) k2 M
- [jb,kb]=find(a(p,tb) == d,1);& ~6 O& h( m) m6 L( x4 \
- j=p(jb);k=tb(kb);
+ y. p+ V. b1 K. r5 w - result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
+ U. s' {7 [3 K# Y2 w1 D9 h1 h - end5 \0 y/ U8 i+ x! F* T\" }
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示, Y- `0 n- A |- v( J) H
result第一行表示起点,第二行表示终点,第三行表示权值8 m2 O" y4 y, b, ~5 ~
例如. H u8 h" _( G& C1 c
result = - 1 2 5 4 4 7) ~! i7 c$ \4 }
- 2 5 4 6 7 39 o8 P ^( ~% {5 l# R
- 50 40 10 30 42 45
* p1 ^5 p7 _\" y7 K5 h1 k - 起点就是1,终点是2距离50/ A {4 v: [3 x) {0 y9 ]; v
- 然后从2,到5距离402 V1 P8 f$ M* y; H- l( M
- 从5到4距离10
d& C* c( S# [: h3 _- s - 从4到6距离30
1 z4 c' ]: y' U t5 u2 t\" q - 从4到7距离42- W7 d9 v5 H' K
- 从7到3距离45
6 h4 _1 W& a' K* a - 最后生成完一整棵树\" ~! O8 Z3 C R
复制代码
4 L1 ^7 \/ }" t% @# r |