通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵1 `7 t+ l+ r3 ]
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
$ u' }1 L! w# y& F5 e- | - p=1;tb=2:length(a);0 A0 ^9 f! h2 D D
- while size(result,2)~=length(a)-1
0 l) X, v+ S( } - temp=a(p,tb);temp=temp(:);9 L4 ^3 m* ~; ` f. }1 q# [0 _
- d=min(temp);
+ v( u4 I1 I\" [ k/ C- h$ E) f - [jb,kb]=find(a(p,tb) == d,1);! O0 d% _2 J\" D# W3 ^# {
- j=p(jb);k=tb(kb);& k' l& I* W. R* A! K
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
2 j, V% l1 x. C9 q/ L k& t - end* N7 a% E/ U5 f+ h
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
9 L i- [; m& @' a' _result第一行表示起点,第二行表示终点,第三行表示权值- i: Q1 \" \1 H9 V- s$ ^ b
例如
3 c* B1 D) ^( \% a- m3 Kresult = - 1 2 5 4 4 7% d, L\" g\" l\" r3 f. K; C
- 2 5 4 6 7 3
5 p# p/ F, v6 z2 V) P: v! [1 O - 50 40 10 30 42 458 z2 M: u0 ?7 X4 t' F7 K: o
- 起点就是1,终点是2距离504 w5 n m! U/ \ C
- 然后从2,到5距离407 L. j% \( e2 Z5 g9 {0 f
- 从5到4距离104 R# E! [' {/ a# A) ^- e6 a: T
- 从4到6距离30& {6 Q b4 ~5 j% F5 |8 p0 P8 f
- 从4到7距离42
+ X9 e- N\" o' t% J, k/ Y - 从7到3距离45
' Z9 C1 l w1 ]7 q7 d8 X# J - 最后生成完一整棵树# t\" s. d\" q: r\" P0 K$ H
复制代码
4 v2 r0 }, U& u# j6 ~ |