数学建模社区-数学中国
标题: 数模:最小生成树prim算法(通用matlab代码) [打印本页]
作者: 2744557306 时间: 2023-11-30 15:17
标题: 数模:最小生成树prim算法(通用matlab代码)
通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵8 M% b7 |$ {5 e0 }+ P1 W
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
/ _. j) i( H* I2 K. f! c& W. h2 N - p=1;tb=2:length(a);
: c5 h/ \, J3 p$ n - while size(result,2)~=length(a)-1
: i1 \5 c3 W$ F - temp=a(p,tb);temp=temp(:);' \1 z# C; O- W. b
- d=min(temp);, d( _! Y3 l4 _ F
- [jb,kb]=find(a(p,tb) == d,1);
# a6 M3 s( W& U - j=p(jb);k=tb(kb);. b7 G0 k& [4 Q K7 u
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];+ R% j! c9 `% b! V/ N& L
- end
+ ]$ `9 n3 C# P5 Y& I
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
- o1 c8 m; o x$ uresult第一行表示起点,第二行表示终点,第三行表示权值- m8 f5 [6 Z/ T( e, z
例如1 o# M6 ]: _7 g N9 a* H H( Q9 X3 S
result =
- 1 2 5 4 4 7
* |: M0 l( u. N2 k - 2 5 4 6 7 3
/ ?/ `+ H* a1 i" c& g - 50 40 10 30 42 45
$ W$ n2 Y6 a O) }* K/ f - 起点就是1,终点是2距离50. b) l; o: Q0 T: k6 b
- 然后从2,到5距离401 x6 E7 K2 v& z: s) Z( |
- 从5到4距离100 L8 Z4 R! D V0 X
- 从4到6距离30
: n3 r$ C2 M7 B/ H; M9 B - 从4到7距离42
; \6 \3 S. \) O$ k* d' O4 j5 k - 从7到3距离45
: ~1 [: G) {8 M7 `' B - 最后生成完一整棵树8 W+ F3 J8 \5 G+ f/ M
复制代码
1 R% b4 F o8 z2 e) U
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |