数学建模社区-数学中国

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

作者: 2744557306    时间: 2023-11-30 15:17
标题: 数模:最小生成树prim算法(通用matlab代码)
通用代码
  1. function [result]=myprim(a)//a为传入的每个点的距离矩阵
    . l* V9 D) T; I
  2. result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
    , R) r! g1 a' @) t- d: m
  3. p=1;tb=2:length(a);' Z( @* H# ~: D7 ?) E7 [& N
  4. while size(result,2)~=length(a)-1. f7 s5 r/ @/ |- _0 d. H5 j( a2 z
  5.     temp=a(p,tb);temp=temp(:);8 f* b" N2 I; h1 Z
  6.     d=min(temp);
    0 H5 j+ ]$ c7 E) d0 Q  @7 h
  7.     [jb,kb]=find(a(p,tb) == d,1);$ }) g+ _, x, p4 l
  8.     j=p(jb);k=tb(kb);/ w- j# M) _5 T2 u
  9.     result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
    # G7 j8 I& I: x  t9 s6 b
  10. end/ D0 \/ W4 I0 A1 l; r) q# V
复制代码
怎么看result

我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
; r" {# r' d, j& F* hresult第一行表示起点,第二行表示终点,第三行表示权值8 g9 }$ J* X4 |( \# S
例如5 h  N8 f% b' W+ g
result =

  1. 1     2     5     4     4     78 l7 C% I7 [/ k9 A5 g- M  R1 O
  2. 2     5     4     6     7     3& R9 Y, u! s: Z) Y9 Y
  3. 50    40    10    30    42    45
    ( Q# b* D* R% W8 K- r. l
  4. 起点就是1,终点是2距离50( m. r$ W7 T, F
  5. 然后从2,到5距离40
    7 Z$ x% j! |' j% p
  6. 从5到4距离101 J( z( `7 i+ J3 V3 e
  7. 从4到6距离30
    & {6 i2 i. K4 H4 g/ R) m1 w
  8. 从4到7距离42( _+ b$ z* c% y& \3 X
  9. 从7到3距离45
    " G7 ^3 P# `' l5 Y, e1 L
  10. 最后生成完一整棵树
    1 {% }8 j  g$ e% j" T
复制代码

+ }# H, t9 ?8 t0 E- m( |* B




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5