数学建模社区-数学中国

标题: 数模:最小生成树prim算法(通用matlab代码) [打印本页]

作者: 2744557306    时间: 2023-11-30 15:17
标题: 数模:最小生成树prim算法(通用matlab代码)
通用代码
  1. function [result]=myprim(a)//a为传入的每个点的距离矩阵8 M% b7 |$ {5 e0 }+ P1 W
  2. result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
    / _. j) i( H* I2 K. f! c& W. h2 N
  3. p=1;tb=2:length(a);
    : c5 h/ \, J3 p$ n
  4. while size(result,2)~=length(a)-1
    : i1 \5 c3 W$ F
  5.     temp=a(p,tb);temp=temp(:);' \1 z# C; O- W. b
  6.     d=min(temp);, d( _! Y3 l4 _  F
  7.     [jb,kb]=find(a(p,tb) == d,1);
    # a6 M3 s( W& U
  8.     j=p(jb);k=tb(kb);. b7 G0 k& [4 Q  K7 u
  9.     result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];+ R% j! c9 `% b! V/ N& L
  10. 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. 1     2     5     4     4     7
    * |: M0 l( u. N2 k
  2. 2     5     4     6     7     3
    / ?/ `+ H* a1 i" c& g
  3. 50    40    10    30    42    45
    $ W$ n2 Y6 a  O) }* K/ f
  4. 起点就是1,终点是2距离50. b) l; o: Q0 T: k6 b
  5. 然后从2,到5距离401 x6 E7 K2 v& z: s) Z( |
  6. 从5到4距离100 L8 Z4 R! D  V0 X
  7. 从4到6距离30
    : n3 r$ C2 M7 B/ H; M9 B
  8. 从4到7距离42
    ; \6 \3 S. \) O$ k* d' O4 j5 k
  9. 从7到3距离45
    : ~1 [: G) {8 M7 `' B
  10. 最后生成完一整棵树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