通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵
- N) A& p& ^0 w+ q d( Q - result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
& t; z4 }+ u8 b, u' h - p=1;tb=2:length(a);
0 v( q' V+ i\" x7 A; @7 J8 W - while size(result,2)~=length(a)-18 {7 P\" j& u. W: e- v0 D* w
- temp=a(p,tb);temp=temp(:);
* ]. _6 ^4 d3 w. w. m - d=min(temp);* o, ?5 a7 O4 S( G$ h ^, K& ^1 j
- [jb,kb]=find(a(p,tb) == d,1);, `) ^ @5 P- T+ h% Z _$ i- O
- j=p(jb);k=tb(kb);
\" Z1 h1 S+ ~. Y* U! {' l - result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];8 J4 J, O7 g% u6 w
- end
' x- b' {0 |8 N. y\" i
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示1 k: s; u% [9 H0 P' d+ h" \
result第一行表示起点,第二行表示终点,第三行表示权值
* O+ y" A# V4 C: T% T例如' R5 C8 O, t9 J' e
result = - 1 2 5 4 4 7# V9 {( i1 \/ v0 x7 ]( Y
- 2 5 4 6 7 37 H2 F\" K. P, g* R. K
- 50 40 10 30 42 454 S9 ?7 e: s% _( N3 T5 v* }0 Z8 W
- 起点就是1,终点是2距离50
2 e' U+ V, j% l( ?: w3 u& V - 然后从2,到5距离40
5 J( S# m; v4 ^9 n [( Z - 从5到4距离10+ a/ Q8 m8 o& P* I+ A, a
- 从4到6距离30
# }- h7 i: T\" E2 n% v0 a4 P. J - 从4到7距离42. ]; N: D* S7 x2 u
- 从7到3距离45\" b( C/ l$ d\" C6 N/ S
- 最后生成完一整棵树
; A8 _$ O; Y% i. C0 X+ ]9 m
复制代码
( I) k" |5 m& D5 ?( M' x8 C8 n |