数学建模社区-数学中国
标题: 数模:最小生成树prim算法(通用matlab代码) [打印本页]
作者: 2744557306 时间: 2023-11-30 15:17
标题: 数模:最小生成树prim算法(通用matlab代码)
通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵
0 i0 R$ N( c$ g) H/ Y/ E, s# U - result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
* _ ?7 g) G, e+ e! p9 N' ~ P - p=1;tb=2:length(a);1 o3 |- D. s1 K/ U n4 D
- while size(result,2)~=length(a)-1
1 p4 ~- n/ h4 C4 e. ?( \ - temp=a(p,tb);temp=temp(:);
8 ? L; `5 j5 \- \" Z6 P& W# l - d=min(temp);
; @8 D# D! y8 M6 m3 D; @# z - [jb,kb]=find(a(p,tb) == d,1);& o7 R h+ Y1 C6 _: g" B5 Q$ t
- j=p(jb);k=tb(kb);
$ K( I" b3 }4 l4 a3 |4 y - result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
$ I C: Y- h I# { - 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 2 5 4 4 7 s& O2 {. n) v6 |* k8 C
- 2 5 4 6 7 3
0 n. z/ {" a/ _; { q - 50 40 10 30 42 45
( n& P$ b/ m: j6 B - 起点就是1,终点是2距离50' }( C) I' @; Q5 C& S* Z% T
- 然后从2,到5距离40
. b F- S% J6 L: F/ l% u - 从5到4距离10# e9 p% t, V: O/ k/ w, `8 Q* |: d2 r
- 从4到6距离30
4 N' h8 S+ e5 z5 K2 S - 从4到7距离42
! S4 H+ {0 N6 u/ @+ X/ Z; L( p - 从7到3距离45% H* t4 e1 s4 ?+ i
- 最后生成完一整棵树4 d% S' T% q* r1 l# C9 {: g
复制代码
8 G3 t1 I$ J: k
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |