- 在线时间
- 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]初来乍到
 |
最短路问题及其算法; X2 X \! U) y7 _% m3 C
一.实验目的:0 n; g' G6 |' V5 b
1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
, }4 A% h7 }( p8 s2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.; J# p) r' N; t7 G
二.实验内容:
7 G- v: W3 E+ b+ n; H+ y) q要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).. D% C% ?3 P, H
为方便计,1km主管道钢管称为1单位钢管.$ j5 K9 ^; \# S* _( G* R8 G6 S& ?
一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:7 |0 W) T0 Y; d8 i$ {
* a, D8 Y$ B! {0 d6 ~$ y
1 2 3 4 5 6 7
# ~' N K5 v9 z) ^, L8 I; I* c
) D1 _: Y( ?! X9 L800 800 1000 2000 2000 2000 3000. n0 e% ^# B; E6 v# \5 D
! }0 Y' s& f" r
160 155 155 160 155 150 1601 @( M5 @) t) Y5 v5 v
9 E! l3 x& M3 j% h, ]. b# t; u1单位钢管的铁路运价如下表:
) U$ s1 V3 Q' I) A5 _% u里程(km) 300
# [! d3 S1 J2 g) N2 R; K5 W4 D301-350 351-400 401-450 451-500# |( e0 R4 O( S- {; z6 r
运价(万元) 20 23 26 29 32
0 Z. A, q" l) |) D4 ^7 @里程(km) 501-600 601-700 701-800 801-900 901-1000
/ r4 s: k% {" X/ N; t; W) Y6 _运价(万元) 37 44 50 55 60
Y1 u" b' n+ D! m. y1000km以上每增加1至100km运价增加5万元.
' @% P: `, n/ o8 E+ a公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
0 N0 f4 [8 A8 O4 E. f$ y X假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
4 s1 ?1 v% h9 h4 O
2 M. [2 }+ r/ q" y试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.) n, ?3 `" i) {! a
三. 模型建立: n- s% H1 l" H5 ~' b
设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
# M# k9 ]' @+ E. @, H- D
: L8 {+ v8 p& B# L. c利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
8 V( O+ C. E. N
# a" O& j4 \. O8 v+ S+ D/ o% Y解:先写出带权邻接矩阵:0 ~4 X) A K' E
" T/ _/ Q- v$ I( f后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .+ |* D1 e/ |( H2 P. E
四. 模型求解(含经调试后正确的源程序)! J: ]% J+ K# Z1 u5 w
(1) Dijkstra算法/ @( r3 Q5 P5 z ?- m; K
road1.m文件源程序:" y, z& n& w$ C9 p* w
w=[0 1200 inf inf inf inf inf inf inf inf;
, x5 x& y, Q" m9 ?6 i1200 0 12 202 inf inf inf inf inf inf;9 }7 F. \ q$ N8 t9 w- q
inf 12 0 inf 201 inf inf inf inf inf; Y* m1 G- Q/ U# Q
inf 202 inf 0 31 20 inf inf inf inf;
% q7 D8 ?" Q! ~% e! R- linf inf 201 31 0 10 inf 205 inf inf;
G8 h1 k' G7 r2 Pinf inf inf 20 10 0 195 inf inf inf;# N, i. `5 m* O8 z# l
inf inf inf inf inf 195 0 5 306 inf;7 Q8 b. m# D/ |' P' Y# X
inf inf inf inf 205 inf 5 0 inf 194;7 f% X- r" E% `3 m$ J
inf inf inf inf inf inf 306 inf 0 10;
0 A2 O2 k8 y8 k$ z& N# vinf inf inf inf inf inf inf 194 10 0]; . r6 i7 D' V( c& R
n=size(w,1);
3 Q! o9 k" G4 mw1=w(1, ;: X' J: O7 q- j7 w2 o5 ?
for i=1:n
1 O% h8 o: E0 T& W7 ] l(i)=w1(i);9 P, X7 @0 x8 R: ?
z(i)=1;* a4 H; T6 v/ U7 l) F9 C2 t% L
end3 N- A! M+ c( `' g
s=[];1 H6 f( S. Z; \- a' }
s(1)=1;
! N- J5 Z1 T. {* ~% |% d1 Ou=s(1);
o7 _- \2 Y& g; V4 xk=1;
0 Y8 `/ W. k8 y5 S. G% J; V- }l;
- ~0 C: ]9 s8 c9 Z9 D3 ~5 T2 f7 zz;0 k' P" O) ^* L+ ~: e
while k<n/ M" {- B7 N8 k7 @( f& J
for i=1:n/ b5 ?2 I6 L4 m0 y3 n
for j=1:k; n% v: A$ \% \3 B0 R
if i~=s(j)
2 @+ D3 K" d/ ?0 t if l(i)>l(u)+w(u,i);
7 g$ U& ^% Y# ?/ t0 `$ q0 y$ m( j. a l(i)=l(u)+w(u,i);
! b9 @3 P1 L' W z(i)=u;
' I6 a6 S7 ~7 c- `& l$ {9 n- f4 | W end
4 o% O1 @8 Z0 c- W" x end+ {# u6 D: e8 V8 v U( ~/ \
end
, g& g0 C& C- E. r" D6 dend% E7 B' [8 j3 Q
l;1 f9 }3 w; O; [1 s% O
z;: U5 I' o8 [' `: \4 w- W
ll=l;' |6 v( K5 {" p% s3 L
for i=1:n* P- } e6 W. q* c
for j=1:k
& {- W& u; @& K/ n& N$ U if i~=s(j)# ]+ p& d6 D/ J) U0 n* @
ll(i)=ll(i);& o& b0 @0 d! _! F
else
' V" A' W; p- {2 k$ ]" I ll(i)=inf;7 g# T' S& k: } ~; E+ w# c( V
end: u$ M) |! F! J' X
end
$ U! r$ j: b$ m$ \end) b& A. S* w" u
lv=inf;4 d2 r8 d& {* I" v4 R! [
for i=1:n
& H6 ^7 s* e0 }% O% l: s/ ` if ll(i)<lv& b6 }6 ]4 P" s) U
lv=ll(i);1 D& D8 H9 H5 C: @' M
v=i;
2 B7 ?6 v& ?! w( x end
8 Q% o( p! q3 p' n# `end
7 `; z4 a: m! {, Clv;4 d- @1 y5 H$ ?! R+ F! ?7 ] O
v;
# v0 S5 l: R) m6 U( ?+ ~# {s(k+1)=v;6 R7 H3 z+ n& `) u! d
k=k+1;
$ {' k' T! _! Xu=s(k);1 N( a1 F5 u# {1 h& s4 ~9 V% a( B5 N) Q. X
end% y& Y5 V1 j# x- ~4 |4 m
l
; J& U, x% B. G& [z
" |) `5 {9 S2 c' ~, q f6 j& k- X, @ L# ?! M
(2) Floyd算法" U0 b7 L& p1 k W- M) q
road2.m文件源程序:, T( B5 M# }$ ~3 x
a=[0 1200 inf inf inf inf inf inf inf inf;3 n: F; }$ x) ^- T5 B V
1200 0 12 202 inf inf inf inf inf inf;
) |7 x9 k3 F+ xinf 12 0 inf 201 inf inf inf inf inf;* q( D" i% ~: |
inf 202 inf 0 31 20 inf inf inf inf;. p5 h3 k3 M8 [* e; V s @
inf inf 201 31 0 10 inf 205 inf inf;
2 v+ k( u" g+ r/ a7 Z- V; linf inf inf 20 10 0 195 inf inf inf;! P B: y$ E4 i! Y* j% z
inf inf inf inf inf 195 0 5 306 inf;% q- }# N- G. y( O- `. l/ I, ~
inf inf inf inf 205 inf 5 0 inf 194;
% [$ H! P' V9 J: C) |inf inf inf inf inf inf 306 inf 0 10;
3 v* b2 f; E( Z& ~3 Yinf inf inf inf inf inf inf 194 10 0];8 U0 q. E( E& V C8 w f
[D,R]=floyd(a)
5 h3 q" ?+ y" e7 T9 k9 V( mfloyd.m文件源程序:
. Y3 a7 k, |) N. G# ?function[D,R]=floyd(a)) h5 d) v6 S* Q* J Z
n=size(a,1);
& V( L; h: K7 f. @0 K/ ^6 U' F6 R3 kD=a0 T9 D5 A' b) L
for i=1:n1 _/ p* Q+ a- R" v( ~. D7 o0 t" G7 F+ G
for j=1:n: D# U2 e( B. U+ ?: S4 B0 z/ L6 C
R(i,j)=j;
) F" z B4 Y5 h* @ end" K$ p# M6 @ T8 ]" u
end, V+ U0 n5 F$ N+ b3 E
R
4 Z! f1 r% ^" X z2 {$ E( i$ Kfor k=1:n+ O/ i1 k4 m t" E7 W4 q! t
for i=1:n+ j( @7 h; o3 {
for j=1:n) ?* x% u* }% b5 R+ ]: z
if D(i,k)+D(k,j)<D(i,j)2 q% L, G( A0 ]# f$ ~
D(i,j)=D(i,k)+D(k,j);
. Z- [& k/ h1 p M, R( z, C6 E( _' x R(i,j)=R(i,k);4 O3 _8 e: S; H
end
+ E4 W( e3 T, M3 J end) B0 ?( `8 w! f. U9 G& {
end! M# s4 O1 u+ |6 f6 y+ t
k
5 T' y) T# U. U- q7 |' q/ T9 Y D5 D* m* I0 k- x& N3 R* r/ z
R
1 N& F: u5 l0 x2 Rend
6 r& p% L c) |( Y9 u- }, h. i' X五.结果分析) v; w) C. E0 Q/ T' q
(1)Dijkstra算法
" N% @# V2 t+ e3 q5 [; d运行结果:
. b s, i1 A6 y) |5 K* k) xl = 0 1200 1212 1402 1413 1422 1617 1618 1822 1812
2 ?+ \5 h% q) j5 k3 Nz =1 1 2 2 3 4 6 5 10 8
* o) d: s2 N5 V) E6 `2 B' k( s 2 I6 \) F( a% L' Y! P6 f& m
结果分析:9 T T2 g( y, K5 W% C$ r
通过运行结果: 到其他顶点的最短路的权 ,可看出,$ Y/ i1 c% ], n& ]% Z" o
到 (即 到 )的最短距离为1812(km);+ r5 x# m3 ~& n5 d9 }0 e
到 (即 到 )的最短距离为1618(km);( J& S' D T# P+ I; w e; a
* R$ c) n B' C0 m/ C o; n" d
到 的最短路径为:V1→V2→V3→V5→V8→V10;
, M, X- @% B5 r) e9 K x. Z6 f 到 的最短路径为:V1→V2→V3→V5→V8。; h2 I5 m( s9 i0 b
3 [. e4 r, r$ h+ ~; D(2) Floyd算法
E. _. r8 W; r, _& b运行结果:, N: B- n* w# k# e
D =
/ Z2 d3 S% J: { 0 1200 1212 1402 1413 1422 1617 1618 1822 1812! Z- }5 s# ]6 Z
1200 0 12 202 213 222 417 418 622 612% i8 |2 D! R9 o7 m2 h8 C/ S% Z
1212 12 0 214 201 211 406 406 610 600
' U! B4 k0 Y) t8 v' V 1402 202 214 0 30 20 215 220 424 414& V0 V2 m. R, N; Y t, E
1413 213 201 30 0 10 205 205 409 399' F8 T; y: ]. d
1422 222 211 20 10 0 195 200 404 394: O- M' W- Y% i7 o5 h8 Y
1617 417 406 215 205 195 0 5 209 199
2 w3 M9 m9 U9 y! v 1618 418 406 220 205 200 5 0 204 1940 h1 b* O" [" a7 _# h4 i# c2 u' I
1822 622 610 424 409 404 209 204 0 10
" r+ Q2 Y, r' G4 d 1812 612 600 414 399 394 199 194 10 0
1 S% ^+ F% Z# r+ I! v* Z; v% s0 S: g4 F; T6 M, ]9 h# z" S
R =0 z) F1 R8 P; N& k) C
1 2 2 2 2 2 2 2 2 2
6 N n% Y5 r( G( X% q 1 2 3 4 3 4 4 3 3 36 Y; ?5 r1 p* h
2 2 3 2 5 5 5 5 5 5
3 e3 R& ?# _7 c) g+ I 2 2 2 4 6 6 6 6 6 6' @$ S& p/ O6 d& C4 J
3 3 3 6 5 6 6 8 8 8
) s2 L2 B, {0 X2 s! B 4 4 5 4 5 6 7 7 7 7) i5 m$ l7 ]9 \* _3 K" c
6 6 6 6 6 6 7 8 8 82 Q9 P2 p8 J1 g# j4 G6 u: p
5 5 5 7 5 7 7 8 10 100 ?9 X; s" w9 B( W4 a4 F- m
10 10 10 10 10 10 10 10 9 10
8 ]" }4 ]: Q1 J5 V5 Y 8 8 8 8 8 8 8 8 9 100 F- M. h5 p' ~" e% s" g
结果分析:' e$ A- K3 F% }3 w# ]
通过运行结果:可看出,4 Y9 o$ {' b" y- B/ z! e6 `
到 (即 到 )的最短距离为1812(km);8 |- P" G/ E" y' Z4 r' s' K- x J6 g. J- G
到 的最短路径为:V1→V2→V3→V5→V8→V10;
5 o: F# _0 [6 w, H8 D! P2 G 到 (即 到 )的最短距离为1618(km);
" W6 `0 ? X# ?% |; f+ P 到 的最短路径为:V1→V2→V3→V5→V8。
# G7 g' P/ }$ P5 m" m7 g0 q; X( y$ [0 k; b
A2 g; e7 I- T |
zan
|