数学建模社区-数学中国

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

作者: 2744557306    时间: 2023-11-30 15:17
标题: 数模:最小生成树prim算法(通用matlab代码)
通用代码
  1. function [result]=myprim(a)//a为传入的每个点的距离矩阵" f  P. l0 A- Q4 c+ A: |
  2. result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
    1 J: t0 u/ ?! H' n8 v- h1 ^6 N
  3. p=1;tb=2:length(a);1 |$ F5 N! N0 }  K* u$ ~2 X( {
  4. while size(result,2)~=length(a)-1
    ' i; H) L: p8 Q3 a/ i7 y5 H7 v! i
  5.     temp=a(p,tb);temp=temp(:);
    , G2 V) V/ J" J2 }" a7 D' C
  6.     d=min(temp);! n  L# r1 I1 l; t+ r- ^
  7.     [jb,kb]=find(a(p,tb) == d,1);& J! a& @( v. S; L
  8.     j=p(jb);k=tb(kb);: d1 w" r% A; p8 M6 M8 i- k% k( r
  9.     result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
    + Z2 H/ t) R, Y; h& r* w$ \4 q
  10. 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. 1     2     5     4     4     7
    $ M$ E& `3 i% C/ q& |% M; i
  2. 2     5     4     6     7     3
    : y: I: W# o8 @+ d7 N; P
  3. 50    40    10    30    42    45) x& z4 a- |( ]. d, S9 b+ [
  4. 起点就是1,终点是2距离502 }3 H5 D; h) q
  5. 然后从2,到5距离40
    2 P& B+ B1 M0 o+ s/ t
  6. 从5到4距离108 ^8 ~& q- a4 p5 N' d
  7. 从4到6距离30
    ; ^5 ^: {; X4 }. p# U  ^- _
  8. 从4到7距离42+ }- f. y/ G6 e# p$ O: w
  9. 从7到3距离45
    2 |2 M* |/ S- J  C! [
  10. 最后生成完一整棵树# t; _" j1 [# }0 ]
复制代码

6 X( X4 r+ j: K; I




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