- 在线时间
- 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]初来乍到
 |
最短路问题及其算法) u7 p5 H. N! U0 v
一.实验目的:
$ y* v5 C5 }5 w: ~1 j! F. X1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
. I7 D u4 _$ ^9 Y$ L; X2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.8 j7 x2 P- c) k/ ]1 E+ {
二.实验内容:7 q2 L8 N, [& ?0 t0 {7 E* h" a
要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).: j/ ^/ E! v8 q* A* }
为方便计,1km主管道钢管称为1单位钢管.
& W( y8 |9 x% p5 ]* g一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:1 q+ q7 p# d$ ~& q7 b, S) f
1 `" M' P4 i8 l7 a8 [ C, B
1 2 3 4 5 6 7: i0 ?9 O% [9 O# K
: E0 \ f ]9 Q. W3 w3 _. G
800 800 1000 2000 2000 2000 30004 ` b! A& u( L, k ~2 i6 ], i
?" Q% U3 J3 R6 [) r
160 155 155 160 155 150 160
" m2 z3 s& n7 ?9 m. P4 ]
3 i( q" @" Z" @1单位钢管的铁路运价如下表:
+ u: c$ ?, ]7 _/ `, Y0 M; N; R2 \. L/ a里程(km) 300
% s; c+ R# J# o+ ?/ E( t5 L5 _301-350 351-400 401-450 451-500. }8 A+ I8 \; \
运价(万元) 20 23 26 29 32
: ]3 s7 k% Y* E- \0 T- w里程(km) 501-600 601-700 701-800 801-900 901-1000
) P. O% q) c/ Z6 E运价(万元) 37 44 50 55 60
$ Y& t8 ~- N. I1000km以上每增加1至100km运价增加5万元.
2 N. j0 B" k) F- C. g公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
3 F A# Y( f+ Y* S k& W% Y! S9 f假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
0 S2 M& V. y9 q8 b7 x8 m8 p
- j0 k z3 h/ [. h, f$ u试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.6 c6 I5 n- P; v+ k* t
三. 模型建立, c# J$ n2 }2 B0 l: W
设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
3 X, K# `; m* j0 h- ?( M 3 J7 C; F, X4 L V2 M0 v) P
利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离8 b& N! R8 a! r2 M
3 K4 {$ u7 a% g. B# K' F
解:先写出带权邻接矩阵:
8 @+ t0 z+ S) S' j+ y $ k. G5 c$ k3 P! |
后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .5 l. F' h; x. M# O& d; W
四. 模型求解(含经调试后正确的源程序)
* h; x. ?( z' M- d0 o. `' L(1) Dijkstra算法
, V2 M; F* N, }/ _5 z( m' Xroad1.m文件源程序:
, f% |, t8 j- Q- f' w' fw=[0 1200 inf inf inf inf inf inf inf inf;
& Q/ z8 q& k; v+ N" d1200 0 12 202 inf inf inf inf inf inf;
0 U5 P# n8 H% Yinf 12 0 inf 201 inf inf inf inf inf;
1 p" A0 X$ I$ k4 j5 ]inf 202 inf 0 31 20 inf inf inf inf;. A- ?$ k" h1 L2 \: p8 C ?
inf inf 201 31 0 10 inf 205 inf inf;
6 U* W( h# q# Zinf inf inf 20 10 0 195 inf inf inf;
2 v1 X" `8 S2 w, jinf inf inf inf inf 195 0 5 306 inf;" j a" C% O, |5 x9 Q0 n
inf inf inf inf 205 inf 5 0 inf 194;
# I; B5 J! C( S$ s winf inf inf inf inf inf 306 inf 0 10;
. h6 C" t3 \! u1 Sinf inf inf inf inf inf inf 194 10 0]; ' T' Q: d. ]$ y! u
n=size(w,1);4 @# ?. Z3 W* c/ O5 i
w1=w(1, ;2 v! K) _! z2 p# Y$ X- o
for i=1:n8 }, c6 n: @1 P- q' T) {8 f+ s
l(i)=w1(i);/ R( W, l" y, O8 m9 M& Y
z(i)=1;9 L6 {) w" c' b9 |
end
5 d" \1 X& o* i/ Q; x6 u2 cs=[];* g+ I. O- t: I
s(1)=1;
/ F; n- C% m1 |u=s(1);
, U( `/ U/ q5 C( }0 u3 mk=1;" _, q2 R8 J/ n
l;
# r- ?8 U* u9 [' w6 |1 M, X+ ?z;
4 w [/ X- f* A' @while k<n
9 k- O% q/ r8 k for i=1:n
! k& D& {0 l& e; E. ?* o+ S for j=1:k; t" F- l1 \0 T) _. U {+ p4 g+ f* S
if i~=s(j)
; b. I4 |+ }/ m if l(i)>l(u)+w(u,i);
) g G( P0 @2 n8 ^+ U3 j l(i)=l(u)+w(u,i);
1 B: X3 |! Y! }% ]0 s0 k; y# l z(i)=u;
5 `/ d d& \6 j& y& [ end
; @# h7 B& Z, `- F; U, ~0 Y end! z! s& K; S1 i
end
: y$ I: Y6 Q f9 Y# b- }3 mend
/ |- P/ ^" r) ]6 v- W! n& Q l;9 E8 Q+ H7 R8 f8 b( p @/ i! Z
z;* M& E0 l/ E& ^; q. Q" n* s
ll=l;& B5 W1 P8 O7 o3 n* B
for i=1:n) E3 n: \! n3 R0 D) J% `2 T
for j=1:k
9 q7 v# J4 S# x O# j" ]& @) n if i~=s(j)
/ F0 R- \. k; v5 ]. Y ll(i)=ll(i);7 `$ O% y/ ~2 n: a" P
else
- p4 m! ]% x1 x3 |2 c' i2 _- c ll(i)=inf;% Y5 s0 s# J5 A" f
end
B/ y) ^/ N6 F. N9 Bend$ A: m& S- I# B) X6 k, f! ] t3 j! L
end
( m( V! t" g4 |( k& S& u4 ]; \lv=inf;% S) \) F h, _# Q$ e+ P! A
for i=1:n
& J% w/ V' o7 L+ | if ll(i)<lv V, Y2 o1 J1 h8 R$ G
lv=ll(i);
4 w& N! s1 I* k0 { v=i;
9 t9 n3 N! V" q; U, ?# [ end
1 b7 k3 X8 b$ Y g' Send
# ]. `2 f. K" [% r- @2 Vlv;
1 U, S# \/ \ x# z* z& av;
. B: B, s. w$ ]# z$ K2 A3 _s(k+1)=v;
3 n2 H% B( p( e7 A/ R* p& _0 Uk=k+1;
! T* e3 N, h+ I$ c& lu=s(k);# b' H: ~; E4 ]! E/ ` L4 H
end) e$ O; R3 D8 e7 t: `/ _& u
l+ d; X! o* D) U8 ?
z
) |2 D* q6 b, `: q+ C& b9 v1 m) n8 I. t$ t1 G' ]2 s1 O
(2) Floyd算法1 r1 `4 b9 _0 o" b5 Q; c
road2.m文件源程序:
: N; _4 ^: Y$ R/ U5 Y8 K" D2 Ya=[0 1200 inf inf inf inf inf inf inf inf;$ O) o) F% s% k* @
1200 0 12 202 inf inf inf inf inf inf;. t. d" @- ]2 g, h$ B5 X2 P6 B) C
inf 12 0 inf 201 inf inf inf inf inf;
4 \, b* U6 k; winf 202 inf 0 31 20 inf inf inf inf;
4 M9 R- h2 r8 {. W, D* Vinf inf 201 31 0 10 inf 205 inf inf;
B- ~% f& F, K/ Ninf inf inf 20 10 0 195 inf inf inf;
# \5 e2 O- g% p: R5 A: k; A7 [3 oinf inf inf inf inf 195 0 5 306 inf;
v ?! g# d% _* A# v6 c) x7 Rinf inf inf inf 205 inf 5 0 inf 194;
6 u6 h/ l4 S% D2 Y: iinf inf inf inf inf inf 306 inf 0 10;
- |( D+ b) Y! J( }# t' J* Xinf inf inf inf inf inf inf 194 10 0];; U1 q, L% R, Z" e
[D,R]=floyd(a)+ R& c1 @; Q: p. _$ \% p
floyd.m文件源程序:
8 n! y% s& v7 Mfunction[D,R]=floyd(a)
s7 D. T% b: C u6 Fn=size(a,1);1 s! ?% c7 _- |8 g
D=a
) q2 T n. S* S* ` ofor i=1:n0 O7 }' J5 ?* j+ K" p
for j=1:n
4 U7 Q& X" ^. M7 L1 } R(i,j)=j;5 U# V# ?4 j6 x) [' N W
end
( y; Y3 [0 O% M' w$ |6 Uend; n5 z8 \, M% m' Q2 b3 y; p: L/ v
R
. s" H1 B4 ?/ q! M2 ?4 Tfor k=1:n
0 V( w% c( j! V H7 Z3 Y& R7 B5 O6 \ for i=1:n/ i* t' R9 ~" k6 C
for j=1:n
, \# k. T+ o0 H Q! N& {5 p3 o if D(i,k)+D(k,j)<D(i,j)
( u7 N9 a9 b7 b4 f+ O1 ^) p D(i,j)=D(i,k)+D(k,j);
0 E& h* H8 M h7 s3 A! v R(i,j)=R(i,k);
7 {5 H+ R# |' p! w, u# t2 Q end
* J% o# @. x. S" Z. f( F% _& j" A end7 }+ u1 h6 F9 u3 h( ?4 |' L2 Q' Y; ?7 ^
end- a* Y/ Z" N5 ~% r% |
k
* W, k* ?' g+ i7 T- v" X# i D
4 _4 P S$ d& d! B5 } R, u, B) t& _$ l% @; t
end! {: U9 n3 m! a9 Y
五.结果分析/ ^* K) J/ t$ S4 N# s" B u" V
(1)Dijkstra算法0 D" a" W1 V x) @& Z2 t5 S
运行结果:
2 ~* I5 e& a7 M5 I% vl = 0 1200 1212 1402 1413 1422 1617 1618 1822 1812
, p" p2 j& b8 i4 {- N+ Dz =1 1 2 2 3 4 6 5 10 8
3 B1 q4 k! E6 U( V" `3 O 9 z/ q( C- d. J
结果分析:
+ h; E& q$ |- v( L1 O! N通过运行结果: 到其他顶点的最短路的权 ,可看出,' [) H/ |5 @" K0 _; b. [. V/ @
到 (即 到 )的最短距离为1812(km);9 c9 Y8 K- l" B5 N
到 (即 到 )的最短距离为1618(km);0 P% h) y1 ~% r# f3 ~8 D/ t% `
: g# ?$ R2 f; [! L* h8 L; J 到 的最短路径为:V1→V2→V3→V5→V8→V10;" {7 Y$ h! b8 W+ m6 v
到 的最短路径为:V1→V2→V3→V5→V8。
) k* e" k' ?, m5 f4 F8 W3 S, T+ L& J+ j0 d4 D* V
(2) Floyd算法% b- J$ \4 k+ r1 a" Q) L' d
运行结果:; O$ L9 n; @4 R0 C1 x. t
D =
d) w) V6 f5 ?+ g: a 0 1200 1212 1402 1413 1422 1617 1618 1822 1812# m5 d b' @. v/ T# O% J
1200 0 12 202 213 222 417 418 622 612- P9 H. G) l }. E( ]* b* b: v
1212 12 0 214 201 211 406 406 610 600" C: T3 P" j) y5 ?+ u z1 k
1402 202 214 0 30 20 215 220 424 414
5 A, `$ n# a1 C& u0 ?3 s$ c x 1413 213 201 30 0 10 205 205 409 399& w& p7 J( r- }+ P& P
1422 222 211 20 10 0 195 200 404 394
0 H* G4 K" o! L 1617 417 406 215 205 195 0 5 209 199
6 z+ R' G% Z9 m) X4 t7 P( | 1618 418 406 220 205 200 5 0 204 194! L/ `5 m! T# A+ s
1822 622 610 424 409 404 209 204 0 10* e3 g' U2 w5 p3 l$ w- F7 Y- F7 [
1812 612 600 414 399 394 199 194 10 0) G7 \1 B: Z9 q/ }0 y, e
0 x% v1 \( L/ {+ Y6 A
R =7 Y% [! q, [3 A4 v
1 2 2 2 2 2 2 2 2 2
7 R# c, y0 f/ A 1 2 3 4 3 4 4 3 3 3
# Y0 w: w; [# j: w$ A1 C2 b- \ 2 2 3 2 5 5 5 5 5 5' |3 J7 N, u0 _* G$ F1 J" i. G
2 2 2 4 6 6 6 6 6 65 h! J0 c0 V! c: ~& W+ F+ y
3 3 3 6 5 6 6 8 8 8- U% V# `0 m# c4 D; x- P+ t
4 4 5 4 5 6 7 7 7 75 e' u4 r" i: S/ s9 `
6 6 6 6 6 6 7 8 8 8
5 {3 w+ Q9 Q8 n# c; J% H 5 5 5 7 5 7 7 8 10 10
. D. q9 k0 @& `! K; z" o: i 10 10 10 10 10 10 10 10 9 10
, p2 {' l; l7 p9 `! {2 D R, X 8 8 8 8 8 8 8 8 9 10( E7 N. ]1 F# d" U) G9 l1 h
结果分析:8 _; n- v2 {7 Z! y
通过运行结果:可看出,
2 k& N4 D1 A" O2 `" D: |" U 到 (即 到 )的最短距离为1812(km);
2 f1 y# }5 x' A. S" \: Q 到 的最短路径为:V1→V2→V3→V5→V8→V10;1 d& H6 j' n1 c1 J4 y1 T5 @
到 (即 到 )的最短距离为1618(km);' b* J1 a) Q2 x2 n
到 的最短路径为:V1→V2→V3→V5→V8。
0 `$ u1 R/ d5 M) s; v* t; o$ l
6 H$ M+ }0 a1 c; o2 [/ m" \7 p6 Q# Y: ~6 f
|
zan
|