数学建模社区-数学中国
标题: 数模:最小生成树prim算法(通用matlab代码) [打印本页]
作者: 2744557306 时间: 2023-11-30 15:17
标题: 数模:最小生成树prim算法(通用matlab代码)
通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵" f P. l0 A- Q4 c+ A: |
- result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
1 J: t0 u/ ?! H' n8 v- h1 ^6 N - p=1;tb=2:length(a);1 |$ F5 N! N0 } K* u$ ~2 X( {
- while size(result,2)~=length(a)-1
' i; H) L: p8 Q3 a/ i7 y5 H7 v! i - temp=a(p,tb);temp=temp(:);
, G2 V) V/ J" J2 }" a7 D' C - d=min(temp);! n L# r1 I1 l; t+ r- ^
- [jb,kb]=find(a(p,tb) == d,1);& J! a& @( v. S; L
- j=p(jb);k=tb(kb);: d1 w" r% A; p8 M6 M8 i- k% k( r
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
+ Z2 H/ t) R, Y; h& r* w$ \4 q - end
# M t* J; k4 h4 |
复制代码 怎么看result我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示1 H9 U( O. J9 H# X, R
result第一行表示起点,第二行表示终点,第三行表示权值 F1 ^* Z! ]8 V$ g, x z a
例如
6 M9 b9 x; J( f1 G/ X ]result =
- 1 2 5 4 4 7
$ M$ E& `3 i% C/ q& |% M; i - 2 5 4 6 7 3
: y: I: W# o8 @+ d7 N; P - 50 40 10 30 42 45) x& z4 a- |( ]. d, S9 b+ [
- 起点就是1,终点是2距离502 }3 H5 D; h) q
- 然后从2,到5距离40
2 P& B+ B1 M0 o+ s/ t - 从5到4距离108 ^8 ~& q- a4 p5 N' d
- 从4到6距离30
; ^5 ^: {; X4 }. p# U ^- _ - 从4到7距离42+ }- f. y/ G6 e# p$ O: w
- 从7到3距离45
2 |2 M* |/ S- J C! [ - 最后生成完一整棵树# t; _" j1 [# }0 ]
复制代码
6 X( X4 r+ j: K; I
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |