数学建模社区-数学中国
标题: 数模:最小生成树prim算法(通用matlab代码) [打印本页]
作者: 2744557306 时间: 2023-11-30 15:17
标题: 数模:最小生成树prim算法(通用matlab代码)
通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵+ j3 ]0 b; b5 j# J( a5 C$ V
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值; k, ~! i' r! W5 V+ ~
- p=1;tb=2:length(a);# x* R9 r8 G4 `8 Z, ]
- while size(result,2)~=length(a)-1
: w [0 ]/ E' a6 V" j7 Y - temp=a(p,tb);temp=temp(:);: R: N, b8 h3 g; G$ v! j& B7 f2 u& d( b
- d=min(temp);
2 ^9 M) j; o2 u( M - [jb,kb]=find(a(p,tb) == d,1);) y/ p4 _9 c" V* e; F
- j=p(jb);k=tb(kb);! P+ _ e' G3 i
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];& b* d' b# |5 {! u
- end
/ p% d& l( K# o& @$ g7 w
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示" L2 t' G K# @
result第一行表示起点,第二行表示终点,第三行表示权值6 M, @/ t! P1 Y. `& F" P9 K
例如; t/ S+ h/ z8 r# I: p. y! Q) V
result =
- 1 2 5 4 4 73 g! {: j* f1 b, l: H6 O5 O* x8 c
- 2 5 4 6 7 3) v! E' @/ F, R2 ?0 t
- 50 40 10 30 42 45
' w, L* q1 C; N+ N) L* [8 D, P, @ - 起点就是1,终点是2距离50
$ N3 K& C. o' a/ F$ b - 然后从2,到5距离40
! g8 l" S6 b) a8 } - 从5到4距离10! i/ H8 h0 D& K0 ]& K; D$ S
- 从4到6距离30
" Q7 r# ]) A" x# O3 s! v" [$ m - 从4到7距离428 S# E6 _5 L7 E: h3 o7 H
- 从7到3距离45; L+ U, G) o- Z) W+ v
- 最后生成完一整棵树, ?3 b, @& L( ?
复制代码 : |8 R, d! [. ^ \
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |