数学建模社区-数学中国
标题: 数模:最小生成树prim算法(通用matlab代码) [打印本页]
作者: 2744557306 时间: 2023-11-30 15:17
标题: 数模:最小生成树prim算法(通用matlab代码)
通用代码- function [result]=myprim(a)//a为传入的每个点的距离矩阵
. l* V9 D) T; I - result=[];//用result(3×n)矩阵来表示,第一行表示起点,第二行表示终点,第三行表示权值
, R) r! g1 a' @) t- d: m - p=1;tb=2:length(a);' Z( @* H# ~: D7 ?) E7 [& N
- while size(result,2)~=length(a)-1. f7 s5 r/ @/ |- _0 d. H5 j( a2 z
- temp=a(p,tb);temp=temp(:);8 f* b" N2 I; h1 Z
- d=min(temp);
0 H5 j+ ]$ c7 E) d0 Q @7 h - [jb,kb]=find(a(p,tb) == d,1);$ }) g+ _, x, p4 l
- j=p(jb);k=tb(kb);/ w- j# M) _5 T2 u
- result=[result,[j;k;d]];p=[p,k];tb(find(tb==k))=[];
# G7 j8 I& I: x t9 s6 b - 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 2 5 4 4 78 l7 C% I7 [/ k9 A5 g- M R1 O
- 2 5 4 6 7 3& R9 Y, u! s: Z) Y9 Y
- 50 40 10 30 42 45
( Q# b* D* R% W8 K- r. l - 起点就是1,终点是2距离50( m. r$ W7 T, F
- 然后从2,到5距离40
7 Z$ x% j! |' j% p - 从5到4距离101 J( z( `7 i+ J3 V3 e
- 从4到6距离30
& {6 i2 i. K4 H4 g/ R) m1 w - 从4到7距离42( _+ b$ z* c% y& \3 X
- 从7到3距离45
" G7 ^3 P# `' l5 Y, e1 L - 最后生成完一整棵树
1 {% }8 j g$ e% j" T
复制代码
+ }# H, t9 ?8 t0 E- m( |* B
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |