- 在线时间
- 0 小时
- 最后登录
- 2018-6-6
- 注册时间
- 2018-6-6
- 听众数
- 1
- 收听数
- 1
- 能力
- 0 分
- 体力
- 21 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 14
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 14
- 主题
- 2
- 精华
- 0
- 分享
- 8
- 好友
- 2
升级   9.47% TA的每日心情 | 慵懒 2018-6-6 10:42 |
|---|
签到天数: 1 天 [LV.1]初来乍到
 |
最短路问题及其算法9 B/ R( I+ ?8 G! N3 ]
一.实验目的:
- I2 y L. i" ~9 N) ?1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
# l2 q) d4 a( [7 @ {, ]! ~2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
0 m8 u6 e; t7 h+ R) Z二.实验内容:+ U& y- |. e% E3 @- s; b7 U
要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).9 W! K# m7 h s: @' u
为方便计,1km主管道钢管称为1单位钢管.
4 e' u3 M6 I4 c' k0 f" J- s一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:1 }6 H8 C% G. H0 h2 J
+ Q7 E& {4 m% B, @9 F( s6 {
1 2 3 4 5 6 77 F0 l+ D' ]. Y. D
4 _ K: B- t8 o' Q
800 800 1000 2000 2000 2000 3000
$ s! Y" h$ l* D+ V
3 ~0 ^; u- |/ o- K; a* [. s: i160 155 155 160 155 150 160
' C! @. D2 k1 _$ s) x' E: C7 s7 N8 k& F5 T' i
1单位钢管的铁路运价如下表:) {) j" L4 L' `! |$ j$ `/ f! P$ _
里程(km) 300
! ?8 t* l! e! f5 k& F301-350 351-400 401-450 451-500
# b" l7 o% q9 v运价(万元) 20 23 26 29 32, |% m- c& J4 R* D! @+ F9 V/ N/ b/ b
里程(km) 501-600 601-700 701-800 801-900 901-1000
8 d& Y9 r. y3 U& ?0 B' d( |运价(万元) 37 44 50 55 60
( t( y1 y& i" h4 {8 X* O- e1000km以上每增加1至100km运价增加5万元.
$ I+ T8 l3 y! ]4 P* H4 z r公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).( R, {- X7 N( E8 ^
假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元." x! n0 ]0 B+ [. t& _& }
! N& a; t p2 q) [2 W. V试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.) W6 Q' x( l, v8 d
三. 模型建立# h2 ~6 }$ U( C. M" \! m) t
设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :" v$ T' \+ A$ b: m
0 o: N/ s+ r1 O0 Z利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离; c& I+ ^4 K! ^! E/ J& m
4 L r4 e- l: k8 [解:先写出带权邻接矩阵:* p5 u# w2 y! m3 {3 P( ^
% e- E# o0 {* @2 h- {1 C
后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
/ W- b; O* y6 B5 N9 G7 A1 g四. 模型求解(含经调试后正确的源程序)4 X4 m& p8 H7 e( D
(1) Dijkstra算法
( y$ O$ n C# ~/ d5 xroad1.m文件源程序:
2 e1 t; W- u5 Jw=[0 1200 inf inf inf inf inf inf inf inf;
, R2 W6 Y! X$ S( L1200 0 12 202 inf inf inf inf inf inf;% S. h& u' K+ x* {5 P$ ~4 U
inf 12 0 inf 201 inf inf inf inf inf;
1 P7 k+ N$ U: c6 A. Q* o: S3 qinf 202 inf 0 31 20 inf inf inf inf;
8 s* K+ e0 @# iinf inf 201 31 0 10 inf 205 inf inf;
1 R" H9 F- I% yinf inf inf 20 10 0 195 inf inf inf;* y/ j, N4 ~) s5 G0 M. f7 i8 K
inf inf inf inf inf 195 0 5 306 inf;
8 E& |" j! v1 c& ginf inf inf inf 205 inf 5 0 inf 194;. s6 ^% U! t1 g
inf inf inf inf inf inf 306 inf 0 10;
* ~5 U7 o( A: h2 ]7 H2 m) qinf inf inf inf inf inf inf 194 10 0];
5 [/ L/ Y* C: R6 f, w& qn=size(w,1);" _1 {$ f; i! b" [$ U; N& q
w1=w(1, ;
4 f" V& G% Z! M& U; a9 p1 H+ bfor i=1:n
2 E5 o0 l. o8 G* p# b; _ l(i)=w1(i);% O: x# R; q; S D( r
z(i)=1;
) j) O$ v9 m! |end5 E! C% w! \4 x2 h9 j" ~* b
s=[];* C! r4 f! B+ `2 |9 i! O$ ?
s(1)=1;
& z% d- |5 l1 P. ~2 Hu=s(1);! Q# s) {( g$ o
k=1;
6 \& m5 w) K& d" V; [l;8 B5 k. ?9 r. ~8 w% U4 C) L1 I
z;
, ~$ G- _; q. D: ^6 D/ [( O( zwhile k<n5 Z$ H# {0 d' M$ a" t7 f: I* i+ Q
for i=1:n
9 a/ s" x; T) c for j=1:k/ e) c5 J- W/ Z- Y X
if i~=s(j)
* b( q6 X/ Y7 c) H. l- B& O! | if l(i)>l(u)+w(u,i);0 x' l0 s1 K& _0 l' A
l(i)=l(u)+w(u,i);
) d( F# D" U2 w1 r0 S4 X9 V7 Y z(i)=u;
6 ?3 T! ?' o2 z. Y end
0 B5 ~. `. N5 A end& [4 v8 e2 C4 o7 m4 A
end( h7 [+ R; _: L- @) Z
end+ ~3 |, i9 {% n; u- f
l;
* h% w" h- n. F, Y- @6 j z;: K t( z) e- X" [* @& z% d( A( F
ll=l;
% S- Y/ J6 T% ]6 j for i=1:n
. j5 ?5 y; r* @% s8 b for j=1:k
' H5 o6 R. X- f9 c8 Q* ~ if i~=s(j)0 p' ~( {; W) k+ P; z# j
ll(i)=ll(i);: J' h" t- G8 f1 t5 B+ G# T
else5 r% t9 ~% ]8 g7 W7 [
ll(i)=inf;/ _: b2 J9 D6 O& b
end
* k* G+ c! }7 ~" n {end
# p( N6 z) ^* f+ v% U6 Fend
6 U0 G M. W& p ^: p/ u/ Zlv=inf;
4 K# w ] P- Y/ K. P+ pfor i=1:n* F5 ~* V, s+ G; Q
if ll(i)<lv7 D2 F8 j6 b' T3 j' ^; ?
lv=ll(i);9 X, e* a4 V" N+ q" p: J
v=i;
+ `$ A0 k, j1 d- ?: d% p end9 T- ]5 `5 \' E5 [) e' D
end; H, ~3 r9 h' y/ U
lv;
6 F$ u* P( K( b" W1 I4 |! jv;
$ O, m0 Q7 M8 J' G6 S) q" ls(k+1)=v;
8 Y6 o+ p; ]) W) f# q M+ q* ^k=k+1;
( ^+ I: f6 D6 q' J% ju=s(k);
% N* i& m0 q" F7 z: e: Aend
6 q, t5 y% D$ L( n9 X' O4 bl
7 F, [# d/ W I" h. Y$ J3 bz
8 S* P4 e2 D! u' W
. {, q4 \0 Q# Q' `9 r7 B(2) Floyd算法6 N0 V$ _) X: P
road2.m文件源程序:
9 i- B5 T6 Z2 i: oa=[0 1200 inf inf inf inf inf inf inf inf;; J; E6 T3 b' ^2 e% M
1200 0 12 202 inf inf inf inf inf inf;
* {# S; A D/ Hinf 12 0 inf 201 inf inf inf inf inf;
* Q, p$ F+ B1 C& pinf 202 inf 0 31 20 inf inf inf inf;5 W, j7 S/ P j8 H$ T% x& h1 g
inf inf 201 31 0 10 inf 205 inf inf;* {- W- c+ G2 g$ N9 V
inf inf inf 20 10 0 195 inf inf inf;1 \! M1 w6 r4 h6 O
inf inf inf inf inf 195 0 5 306 inf;1 T4 `3 c5 R& h8 h9 I
inf inf inf inf 205 inf 5 0 inf 194;
9 o$ y% O4 r! a; y3 v( n' pinf inf inf inf inf inf 306 inf 0 10;
% s& k8 q9 V# O$ \inf inf inf inf inf inf inf 194 10 0];
! x# n" [: q$ Z# x' o; n6 }[D,R]=floyd(a)
, G' ? h1 u* p6 a8 vfloyd.m文件源程序:/ i, {7 `2 J, a
function[D,R]=floyd(a)6 B3 E$ `$ K# m) [
n=size(a,1);
" G1 @% ~0 t; H) R5 W1 H$ d7 fD=a: j+ I) C) |; v0 r* Q0 ^3 C
for i=1:n
" \2 k2 Y `4 E# B) X% f for j=1:n
. b A, \6 K8 u( E0 ]( H3 T R(i,j)=j;
" `& ?* c3 q% q5 ]! r end; K* n# Z" P" w# a0 ~4 |6 g
end
0 P# Z# j, P# RR
( n9 Z( I* e/ B- Mfor k=1:n5 X! ^+ U5 g' m7 G
for i=1:n1 a' E/ U" |4 ~/ m, W" P
for j=1:n
7 S; u6 w9 c0 \& C$ _ if D(i,k)+D(k,j)<D(i,j)# ?8 h7 u( y0 {1 Q" U) a
D(i,j)=D(i,k)+D(k,j);
/ O6 z7 M3 i3 g, |1 S# |3 v R(i,j)=R(i,k);: U0 s. _" E; a$ i
end
7 Z/ W* a* o m0 L n% d, V end
. t8 R9 [9 F& I9 O end, T7 K' j6 l8 @2 B. \1 C
k
! @4 z3 [; _- g1 n+ ~& d% b D% M1 G- _6 h% M* f( E1 _
R
( S& y1 o7 Z! p6 @% Uend
, J7 Z$ [3 H+ `5 h* R# t3 b) ]五.结果分析
' g e" \9 A& b+ L3 u$ r* Z(1)Dijkstra算法+ Y5 X8 O- a- f' z; ^) S
运行结果:
; M& ^& S$ [, @4 x. n, s+ Nl = 0 1200 1212 1402 1413 1422 1617 1618 1822 1812/ C. d0 o9 T* y N9 p' I
z =1 1 2 2 3 4 6 5 10 85 K9 m/ p5 U# i4 g
0 f m% b0 T C1 P1 O2 g
结果分析:
7 z& u5 _' M& i( W通过运行结果: 到其他顶点的最短路的权 ,可看出,
+ H8 e+ q9 u2 t5 c/ N 到 (即 到 )的最短距离为1812(km);
( u/ r( E2 f% J) W: E4 x6 A, b; T 到 (即 到 )的最短距离为1618(km);
% `, b' U a. {! q
6 n/ k' C4 Q) r( S( D 到 的最短路径为:V1→V2→V3→V5→V8→V10;
! N4 A/ Z1 g" y1 x 到 的最短路径为:V1→V2→V3→V5→V8。
7 q6 @% P- r. f( v& T) A- G. K9 i, \9 L$ s, [) |
(2) Floyd算法
" W4 f; M7 \0 P4 V运行结果:
3 M$ T' x' D7 AD =9 z) b9 l2 k5 r- H) J: d9 R$ c
0 1200 1212 1402 1413 1422 1617 1618 1822 1812
2 r. Y/ Z }4 h/ @# d5 y( l0 m 1200 0 12 202 213 222 417 418 622 6120 f* w2 Y4 R9 s8 T! s
1212 12 0 214 201 211 406 406 610 6005 g! H3 {9 R, v3 ~8 J* n6 @
1402 202 214 0 30 20 215 220 424 414; e; M# K V$ D# ^2 `5 ~
1413 213 201 30 0 10 205 205 409 399
5 |) k# U" W( R* l8 {/ V: V 1422 222 211 20 10 0 195 200 404 394% u5 T. Y( _' o
1617 417 406 215 205 195 0 5 209 199
0 R5 { o/ A/ \6 _4 O9 ?4 P, @& N 1618 418 406 220 205 200 5 0 204 194
" Z& V! ^9 }8 M0 P& C* y 1822 622 610 424 409 404 209 204 0 107 ?4 O% B' p0 Z9 O1 d. X! `
1812 612 600 414 399 394 199 194 10 0 J% C, O- h: f* e% n8 p
; Y) c, K6 \" H, P/ AR =. p; I# d: D$ K/ `, @
1 2 2 2 2 2 2 2 2 2
; t0 ?% {: M- j! B 1 2 3 4 3 4 4 3 3 3
% J; h$ i0 |7 ^4 Z1 f w/ ?* J( b( s 2 2 3 2 5 5 5 5 5 5% H2 @* u7 E8 U; |
2 2 2 4 6 6 6 6 6 6% {2 t B; {. Z8 D
3 3 3 6 5 6 6 8 8 8* O1 t/ S+ E0 U* Y9 C
4 4 5 4 5 6 7 7 7 7
3 R. n4 ]$ V/ d @. |6 g6 Z 6 6 6 6 6 6 7 8 8 8+ P4 C9 D. L# h. v* T! J9 G
5 5 5 7 5 7 7 8 10 105 k/ s6 |+ o. ?, I. b+ e3 w
10 10 10 10 10 10 10 10 9 10) {% O# L' X7 c4 I5 m) @
8 8 8 8 8 8 8 8 9 10$ w4 i7 O$ ~% [7 u' u# X0 O' L( N8 b
结果分析:* N# W, K! @1 _6 Q# v( B9 q. b) N
通过运行结果:可看出,( |1 C. G: X4 @; F6 m! x( ~
到 (即 到 )的最短距离为1812(km);
4 M! y6 f. D1 ]$ L% G 到 的最短路径为:V1→V2→V3→V5→V8→V10;
/ O. S& L1 e z3 `9 x! P 到 (即 到 )的最短距离为1618(km);* ]! |, ?. f% O4 K3 Q
到 的最短路径为:V1→V2→V3→V5→V8。
Z0 B2 _0 y$ [' u2 [, L( ^8 Y, }$ r; _1 E( X. y5 f; C% m; P
; W# B: Y5 J$ e |
zan
|