数学建模社区-数学中国

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

作者: 2744557306    时间: 2023-11-30 15:17
标题: 数模:最小生成树prim算法(通用matlab代码)
通用代码
  1. function [result]=myprim(a)//a为传入的每个点的距离矩阵
    0 i0 R$ N( c$ g) H/ Y/ E, s# U
  2. result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
    * _  ?7 g) G, e+ e! p9 N' ~  P
  3. p=1;tb=2:length(a);1 o3 |- D. s1 K/ U  n4 D
  4. while size(result,2)~=length(a)-1
    1 p4 ~- n/ h4 C4 e. ?( \
  5.     temp=a(p,tb);temp=temp(:);
    8 ?  L; `5 j5 \- \" Z6 P& W# l
  6.     d=min(temp);
    ; @8 D# D! y8 M6 m3 D; @# z
  7.     [jb,kb]=find(a(p,tb) == d,1);& o7 R  h+ Y1 C6 _: g" B5 Q$ t
  8.     j=p(jb);k=tb(kb);
    $ K( I" b3 }4 l4 a3 |4 y
  9.     result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
    $ I  C: Y- h  I# {
  10. end
    3 p, k( K& t+ U
复制代码
怎么看result

我怕有些同学想用这个代码,看不懂result里面元素什么意思,在此提示
  l# F: |: z' E* U1 f1 ?2 T* Xresult第一行表示起点,第二行表示终点,第三行表示权值- I) @. u4 P$ _; p( _
例如
; `& R! V1 H$ j; Bresult =

  1. 1     2     5     4     4     7  s& O2 {. n) v6 |* k8 C
  2. 2     5     4     6     7     3
    0 n. z/ {" a/ _; {  q
  3. 50    40    10    30    42    45
    ( n& P$ b/ m: j6 B
  4. 起点就是1,终点是2距离50' }( C) I' @; Q5 C& S* Z% T
  5. 然后从2,到5距离40
    . b  F- S% J6 L: F/ l% u
  6. 从5到4距离10# e9 p% t, V: O/ k/ w, `8 Q* |: d2 r
  7. 从4到6距离30
    4 N' h8 S+ e5 z5 K2 S
  8. 从4到7距离42
    ! S4 H+ {0 N6 u/ @+ X/ Z; L( p
  9. 从7到3距离45% H* t4 e1 s4 ?+ i
  10. 最后生成完一整棵树4 d% S' T% q* r1 l# C9 {: g
复制代码

8 G3 t1 I$ J: k




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