通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵4 f4 h% c4 ^# I
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
9 @/ X$ I6 }; \- b& l\" v! \% G6 p - p=1;tb=2:length(a);; a- X* v. {# V! h7 f' O
- while size(result,2)~=length(a)-15 q# M& l1 I- C1 A: N ?
- temp=a(p,tb);temp=temp(:);
* @, n. A\" z3 M# V6 j5 y - d=min(temp);
' `! u) y# k5 a/ q z: F H - [jb,kb]=find(a(p,tb) == d,1);
# A1 ]9 M* a. [6 m4 _ - j=p(jb);k=tb(kb);& W* U7 Y- e6 z5 L! ?. _+ I- l# o
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
( \1 N1 Z% C& v - end
$ _5 [: t# ]- i6 c8 R+ ~
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
' D" L/ a3 w/ X6 D" v7 g3 kresult第一行表示起点,第二行表示终点,第三行表示权值1 E* k, d/ t5 ?9 g. N Z2 i
例如
2 u @1 P. D" p% S' u- Gresult = - 1 2 5 4 4 7- P2 R9 R\" V+ C! p J: h6 ?
- 2 5 4 6 7 3! }. X: x2 P: }- V
- 50 40 10 30 42 45
9 |, p/ ~) k& Q6 B L) f - 起点就是1,终点是2距离500 h7 R8 ]' b$ m6 s\" j. y
- 然后从2,到5距离40+ N& z1 v2 d `) Q# n5 k
- 从5到4距离10
) q2 E5 C5 @( x5 g( { H) i6 z/ w/ c& s - 从4到6距离30
8 M i _ m# _2 I% }, z, C - 从4到7距离42
) P5 e) L6 O, y1 f0 Z - 从7到3距离45
6 y9 P\" s; ~' c$ \% C - 最后生成完一整棵树9 k, x) p' Y7 n6 e/ m3 c% C0 _
复制代码 6 t! L3 W6 e1 v' I6 ]9 A
|