- 在线时间
- 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]初来乍到
 |
最短路问题及其算法
4 ~* N7 g4 [- d1 s& z! s& w一.实验目的:9 T/ K8 M( }$ N1 P) L1 T- y, t
1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;- W& E5 U0 t& h q. M; T- K) r. m
2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.: f3 X" H; `6 }8 `6 Q& {) P$ m
二.实验内容:
) W% g+ `# i, r* o要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
, \# D( |" u; |( G6 t# u为方便计,1km主管道钢管称为1单位钢管.
! S0 T I& j' z2 d8 {) g4 q+ c一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:& S/ z: K, A/ ]5 ] J( R
1 H& ?% D; e% `( E: Q1 2 3 4 5 6 7
1 p# }; S+ n$ i! G 5 h! d z. w- M' O, @
800 800 1000 2000 2000 2000 30000 q2 Z" ?+ d8 V
/ a8 k, ?: S7 i
160 155 155 160 155 150 160
4 G7 n: X+ J5 z v! k2 _" F8 D- y) w1 ]0 _4 @+ K% {! O- ?/ v
1单位钢管的铁路运价如下表:( [ d' p% J, L& f2 O; B2 S' j6 u
里程(km) 300
x7 C* V7 ^2 W/ g3 z0 I) l301-350 351-400 401-450 451-500
4 F- n: b: d/ a运价(万元) 20 23 26 29 329 L" M* X, [4 {8 G( `/ S9 ~
里程(km) 501-600 601-700 701-800 801-900 901-1000
# O+ F7 a( M: ^; Z0 x运价(万元) 37 44 50 55 60' l/ S+ F9 V; I3 `0 m
1000km以上每增加1至100km运价增加5万元.
+ L/ H' x/ f- N1 X. w公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
( {8 F) l! S9 e$ d+ @3 b' [. f假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.- t4 S& V* l7 O- B( ?
' p6 Q4 r9 d$ D1 ?% p
试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
/ h3 k/ w' V- i! K- x三. 模型建立) }) U, e) L+ w0 j
设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
7 O: q5 y5 r% l/ Z; _ u; P
( K/ \3 j# o" q5 Q3 f利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离" h% s% c7 H# r
, j# d" @& q0 u* W4 d0 D解:先写出带权邻接矩阵:
% j. @0 t. o& \' G2 w! t5 Z/ i% ` 5 t/ a8 q, g! \9 V. V1 x5 D+ J
后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
. r4 c& R H) K2 L% t四. 模型求解(含经调试后正确的源程序)
7 h! {$ u+ X) C3 t7 _" A- R: N3 s( Y# u(1) Dijkstra算法
, @% L5 N" z3 x9 @* f7 ] iroad1.m文件源程序:
* m7 H' A- }3 C' H4 Lw=[0 1200 inf inf inf inf inf inf inf inf;, K% \$ g, R# n8 Y* V
1200 0 12 202 inf inf inf inf inf inf;
* v5 l( x" k' w7 Xinf 12 0 inf 201 inf inf inf inf inf;
+ H$ Y2 M8 B8 Y# c8 k% Ainf 202 inf 0 31 20 inf inf inf inf;( P6 t9 c; G: ^2 k
inf inf 201 31 0 10 inf 205 inf inf;' X' c, P2 |. {' {* ~; A
inf inf inf 20 10 0 195 inf inf inf;
; ]0 @* V- V! y" F1 p8 I4 _inf inf inf inf inf 195 0 5 306 inf;/ x. C# K1 F9 Q( g
inf inf inf inf 205 inf 5 0 inf 194;
- N- _3 O8 m- c3 R! Y7 O7 Oinf inf inf inf inf inf 306 inf 0 10;
m5 `4 T6 ~9 _3 F4 sinf inf inf inf inf inf inf 194 10 0]; 6 W: o6 M2 `" D# H0 F
n=size(w,1);+ \3 W# h, e' Z
w1=w(1, ;% ?; B: V; ^ O. x
for i=1:n
3 P" g' O( G2 a7 d l(i)=w1(i);, c0 q3 {2 V$ X# }3 `1 o: g
z(i)=1;
% N0 Z) N; F* L/ j: J; w/ Yend
. V) z o: Y1 ]1 T# Q: Y0 L; r$ cs=[];
# M3 \+ R" A n( H6 Js(1)=1;& R. Z4 [# c+ u8 q+ U
u=s(1);; ]- z5 E( A6 M( O9 m1 m6 m8 |* \
k=1;
9 s* {5 X" a: ]l;4 p2 x* o* m" c" N& j! F6 o! a
z;1 T% W ~* V8 m# r5 i- F
while k<n6 ~0 o. y2 E+ h- j! d1 o
for i=1:n
, g+ F% n* ?* B: T: n K+ f6 s9 L for j=1:k0 Y5 {9 w$ P2 o2 ~3 q
if i~=s(j)
' U9 T Y1 F6 V; N( d if l(i)>l(u)+w(u,i);( Y# G% P- L. d9 r+ F
l(i)=l(u)+w(u,i);
p: S5 `0 X& Z4 }/ d z(i)=u;# V! M5 _8 ~: {9 Q1 \. @$ l
end8 Z9 |0 g; g) ^0 b1 ~! {1 ~
end; `% @. T7 Z# o' P; U6 v1 g9 [
end
9 u: ]+ c$ T3 T# D' C) Eend
- |9 |( D# R6 M, P4 w, v7 q7 T; H0 p l;
4 y" ]1 {; k, F7 `6 P. B7 Y3 W z;
9 p2 g3 y6 u( E t! xll=l;% `9 r. j3 D. H" C# U
for i=1:n
$ f4 L6 H5 @& Z* v, b) ` for j=1:k9 x) L) f9 k& v! s( q M8 |: W
if i~=s(j)
# C' O. t: T) ] ll(i)=ll(i);
/ d1 [! b- u( g" T4 x, e else j" T% |( M0 ^* k& C3 f
ll(i)=inf;
9 U+ p: \9 z' i. A3 G. X0 L1 d end
& O; {$ Q# G8 ]; y2 ]end
+ R3 ?8 W/ z5 d: _9 w! r8 @end! f5 Z% S: ]8 b9 |1 J7 `6 s/ |
lv=inf;
`2 @3 F2 m$ d9 ffor i=1:n, p! f7 z5 C- I0 n6 B
if ll(i)<lv
[5 C6 L& ^9 P& a lv=ll(i); T* d+ n: P( Q7 [, K5 L
v=i;
4 l8 \ K7 f/ F% D |& ?6 c( l( k! ] end4 y$ t J) _8 k, T) }. m
end
+ A9 q2 w7 r; Xlv;2 j3 |. P0 R3 T1 L3 F) |: x
v;1 X1 ?7 u4 P5 m
s(k+1)=v;
; y! R% m% m! k( u' D! Bk=k+1;
/ ~. Y8 Y- J ^2 ?* w. Xu=s(k); |1 J7 I) ~. q8 k
end; p, X, L; S j* r" b6 k4 D
l) e) l; { X- x- W3 i
z3 @* M( Z* i5 d8 N. x
/ s+ y5 M) R S(2) Floyd算法
# o" f) B0 q4 t: a" ?road2.m文件源程序:( J; c. r- x" A$ f" A
a=[0 1200 inf inf inf inf inf inf inf inf;# M* {1 i( [5 X9 q
1200 0 12 202 inf inf inf inf inf inf;
- g8 I) w. r% G3 Hinf 12 0 inf 201 inf inf inf inf inf;
$ {1 P" x# e. finf 202 inf 0 31 20 inf inf inf inf;! L+ n( R( [9 w- m3 [& A
inf inf 201 31 0 10 inf 205 inf inf;
- r7 T2 n6 q: jinf inf inf 20 10 0 195 inf inf inf;+ D+ }, i5 c1 S1 Q% ~ ^: V0 g9 f
inf inf inf inf inf 195 0 5 306 inf;8 e* X! R: O) b* e" V& L7 o& q
inf inf inf inf 205 inf 5 0 inf 194;
/ h$ d2 [5 q" ^6 ~6 w1 [9 Ginf inf inf inf inf inf 306 inf 0 10;
; ~ n8 l D9 o& [inf inf inf inf inf inf inf 194 10 0];
! y+ V) l, t7 [/ ^. ], G, O4 {[D,R]=floyd(a)
2 p, @ K3 l: j m$ y7 t0 P; t1 hfloyd.m文件源程序:; Y2 E* k' C' K
function[D,R]=floyd(a)' {6 I3 F/ C+ w5 i- K3 t0 G+ W8 I
n=size(a,1);; ^$ n. c/ F$ i2 e; n' ^
D=a% L, `5 r5 S* _0 U$ W* M
for i=1:n
$ z, f$ n. Z y3 c for j=1:n: H8 J/ D) q& Z3 U9 j2 Z( V
R(i,j)=j;$ H. ?- N1 k. q6 x5 b. i+ a8 p
end. K4 \" h7 Y' b9 n" {
end
4 K+ W/ A- X2 m8 rR
+ [9 u- u) N" F0 Z. n+ D3 P5 l6 Jfor k=1:n2 c) }$ k% w T! C0 u+ x
for i=1:n
9 q3 H6 q4 {/ Q0 R: ?, w for j=1:n
9 t, U1 r/ E4 |1 _6 | e: r if D(i,k)+D(k,j)<D(i,j)
* M a6 N/ a: }. \6 |7 i D(i,j)=D(i,k)+D(k,j);, U* [ c: R2 _- y; ~
R(i,j)=R(i,k);2 F4 c# S4 c% _) p6 m
end" h; {. V) G4 z3 z3 F, i' k8 h
end
" @, y9 M6 ~9 T end) V6 i/ Y: g# `0 L% N* h, b4 {
k
- u$ ~" A \8 i! f D9 Q5 o- M* V, u
R6 w* X) @6 h$ G) g
end
' H3 t$ I- |8 R五.结果分析
4 ?4 ?' @' `8 ~: p4 A8 h4 a& u1 Q(1)Dijkstra算法
8 o6 C3 \) Q( M7 b' N运行结果:9 y& q! N/ y% I- L3 t9 Q
l = 0 1200 1212 1402 1413 1422 1617 1618 1822 1812
; M+ z4 Q7 @* c: T( R. A. m* tz =1 1 2 2 3 4 6 5 10 8+ a. O/ O; n1 `8 U5 S
1 I( O2 A( P' ~ x5 X* S1 y结果分析:
. W# S: O) v2 [+ |通过运行结果: 到其他顶点的最短路的权 ,可看出,
9 X5 N; D$ `7 D) m 到 (即 到 )的最短距离为1812(km);) |+ @( `; A P6 W, t: \* ~
到 (即 到 )的最短距离为1618(km);& s0 @ ]( X/ o1 c3 b8 s8 V
6 I1 M' c; a6 I! v: B. I; D; `, g 到 的最短路径为:V1→V2→V3→V5→V8→V10;' a' i; Y: w% |4 w) f/ [$ |4 ^
到 的最短路径为:V1→V2→V3→V5→V8。
6 _3 N( x) {1 T# G: [9 `6 u9 L) p: M% l+ H
(2) Floyd算法2 B. q2 N$ @% x7 q9 }, a
运行结果:7 V3 b$ [3 v; r; Y" @3 p; f
D =
2 ]+ E& d7 [ K& p. U 0 1200 1212 1402 1413 1422 1617 1618 1822 18121 |/ F6 l& `% @! y% T9 c: K$ |
1200 0 12 202 213 222 417 418 622 6120 F+ A5 c/ w% i+ ^! B2 {& N; ~. E. X
1212 12 0 214 201 211 406 406 610 600: {1 \9 W: B* Z9 L
1402 202 214 0 30 20 215 220 424 414
x& H- w2 V, m: s) J3 V 1413 213 201 30 0 10 205 205 409 399& X; Q+ ~0 O) q2 |& o' c
1422 222 211 20 10 0 195 200 404 394+ @8 d/ N, Y @6 ~( w0 p- D
1617 417 406 215 205 195 0 5 209 199
5 U( a3 o8 Z6 T& _8 _$ |# a. y 1618 418 406 220 205 200 5 0 204 194
9 y* D$ n, ]3 D9 h. Y8 r 1822 622 610 424 409 404 209 204 0 10
' E8 i, a. H. o 1812 612 600 414 399 394 199 194 10 0
- W4 `6 P; u9 H0 W* _1 o! j5 Y& \2 y9 x) k0 e5 {$ F
R =9 \# e/ Z1 s' k9 f6 B/ y1 d* ^, t
1 2 2 2 2 2 2 2 2 23 L* C4 e3 E. T/ f# b# {
1 2 3 4 3 4 4 3 3 38 c7 x* ?, y/ {+ E( _+ d! B! W6 c
2 2 3 2 5 5 5 5 5 5+ C9 i5 R1 T$ P% h* h" ^
2 2 2 4 6 6 6 6 6 60 _6 P! }5 U5 A: a) Y
3 3 3 6 5 6 6 8 8 8 g3 @0 l; h& q: M9 Z/ Y* Z3 Y" T
4 4 5 4 5 6 7 7 7 7
$ _3 o0 p- ^1 @/ c5 ?- P 6 6 6 6 6 6 7 8 8 8% h6 a1 b6 X; G
5 5 5 7 5 7 7 8 10 103 V1 g2 W/ |) G+ O+ |8 N8 R
10 10 10 10 10 10 10 10 9 10' _) Z, K# H0 G" x
8 8 8 8 8 8 8 8 9 10
+ n* `( g/ ~1 ^8 M- J: y结果分析:3 _5 F8 {+ O. |/ g0 l5 G# l
通过运行结果:可看出,
& w v8 o! P/ i 到 (即 到 )的最短距离为1812(km);
" ~) ~; m( r1 A) J 到 的最短路径为:V1→V2→V3→V5→V8→V10;& P1 D: \& r; n% X2 I0 K8 Z
到 (即 到 )的最短距离为1618(km);
" T: I% K' J3 I0 B( m( f( C 到 的最短路径为:V1→V2→V3→V5→V8。3 a. L: E0 t+ E5 S# k0 a
! U) V2 ]. h% K7 c) L% e
& g$ j" J2 O: O5 O
|
zan
|