通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵% b: F1 J' b9 V- Y1 Q
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值' o4 }\" l1 Y7 @5 H. }8 q4 q+ D
- p=1;tb=2:length(a);
% i( h# I$ f, M: e, R5 Q8 b - while size(result,2)~=length(a)-1( H' M4 Z6 d; [& h, p' P1 M
- temp=a(p,tb);temp=temp(:);
4 ~$ }; d9 D/ q7 Q8 ?( X( [ - d=min(temp);) H, o0 A\" e6 M7 T6 @
- [jb,kb]=find(a(p,tb) == d,1);3 T( |3 n: c0 r( S$ H
- j=p(jb);k=tb(kb);
5 o; m, r7 N$ `: ^/ V: Z5 F8 L; O - result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];# A0 f3 n: @' r( E( h) W6 Q\" d
- end
\" t0 q5 B$ L3 Y$ Q0 s# @$ Q. g
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示3 L3 r; s; Z$ Y) t
result第一行表示起点,第二行表示终点,第三行表示权值) Z8 e( w6 F6 N6 \! T! C, E3 D
例如) p3 ^8 g( M% {" J& P
result = - 1 2 5 4 4 7
* B9 T! R1 k/ L. e! h; {$ L - 2 5 4 6 7 3
) _# J' \0 g x0 F! L- d. Q - 50 40 10 30 42 45
) V0 P7 s9 Y% u( a7 [5 X: D - 起点就是1,终点是2距离50
6 L1 [2 |2 {# L6 U# Y9 M - 然后从2,到5距离40
b) A/ E, H$ p4 m+ @\" A# Z - 从5到4距离10
( y4 `' s8 a. \! u0 h - 从4到6距离30
% c2 ~ R9 N0 P* x4 j* e0 x( P5 P - 从4到7距离423 |9 f) U+ l( S5 f) `: i\" D9 o
- 从7到3距离45: g- h- @7 ]2 }5 U8 p8 B0 I8 s( I6 y
- 最后生成完一整棵树
1 _0 v! B% [% {/ O
复制代码 a; o+ A" c/ d8 f6 k/ i5 ~1 X6 T
|