- 在线时间
- 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]初来乍到
 |
最短路问题及其算法2 i0 u8 f6 {" o
一.实验目的:
8 |. H! j2 }6 t" D; p1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;% j# j/ `4 A+ U
2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
. o% V. ~% r" u+ D7 i {二.实验内容:
6 l8 n) L7 I c. h要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
& g5 g1 o/ A* ~4 u- B; R" R为方便计,1km主管道钢管称为1单位钢管.
. G$ \; R. ~" Y& s( V. Z* ?) M+ f+ P一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:2 h! I$ G3 }$ W" m
1 n2 I% q2 J Z
1 2 3 4 5 6 7
2 W9 w8 E& O8 ?3 l
T, u8 r, \" j9 m& U L800 800 1000 2000 2000 2000 3000+ C% l S$ K: g; n8 _
4 G! i9 ^0 B3 n* B# i5 s4 I
160 155 155 160 155 150 1601 I# V" \ e" J+ H6 o, q" x/ O
( b) y! a5 s6 M' [' y' @
1单位钢管的铁路运价如下表:! }% y B* t# U. q8 l' P' p. G: R
里程(km) 300( m1 s9 ?$ ]" f; H
301-350 351-400 401-450 451-500
7 p2 n, x/ F) K, v! F运价(万元) 20 23 26 29 32
/ F+ X% I9 u, K里程(km) 501-600 601-700 701-800 801-900 901-10000 P, Q0 S5 P K3 A2 ^/ y) p
运价(万元) 37 44 50 55 60/ r% y: ^9 S. H) E$ E$ e
1000km以上每增加1至100km运价增加5万元.( j$ z# \+ A+ R. I1 q
公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).2 a* s! L9 [* C: w2 j
假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
/ B+ w: v* j0 d H 9 T, b4 E V" o& \3 Z& H
试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小., z$ O0 U8 @1 _0 q
三. 模型建立" X& z, y% C R- z
设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
3 U, V# G$ V/ v6 ` 2 }; X( ~2 p0 m2 |
利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
+ K I, l) M5 F/ F . h1 N- n+ B# D8 s
解:先写出带权邻接矩阵:9 p& A$ L+ {$ ] Q! q9 y
+ b: `: U% @% }. P8 h
后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .7 _4 X5 _! t0 J' H9 w/ F4 V
四. 模型求解(含经调试后正确的源程序)
' h( I( m: M9 {* ^" x$ y8 O ~(1) Dijkstra算法0 D2 j4 @" y% t5 @8 V0 l
road1.m文件源程序:
' G2 T y$ V4 W3 zw=[0 1200 inf inf inf inf inf inf inf inf;3 q$ D" V: S+ F' W) ]
1200 0 12 202 inf inf inf inf inf inf;" c! @! H2 V4 M5 t
inf 12 0 inf 201 inf inf inf inf inf;7 E5 s2 r& I6 S/ I) M! `6 O
inf 202 inf 0 31 20 inf inf inf inf;; L% h+ Y+ _5 _! D J& k! y3 F- S
inf inf 201 31 0 10 inf 205 inf inf;( F% f' Y9 S/ y5 x4 B1 ]5 g
inf inf inf 20 10 0 195 inf inf inf;
S; ]8 V: c5 \' m1 {inf inf inf inf inf 195 0 5 306 inf;
6 z) ^* v& g! v! Z" N1 C# einf inf inf inf 205 inf 5 0 inf 194;
3 c6 Y/ c1 j) x! `9 `7 `8 R& _inf inf inf inf inf inf 306 inf 0 10;
6 d* _9 G/ o( Dinf inf inf inf inf inf inf 194 10 0];
B. N" ?" X ]" Q7 xn=size(w,1);
/ x7 d1 Z+ ~. U6 ?w1=w(1, ;
+ L8 V( b) `/ u6 B& j6 Nfor i=1:n: q4 `/ B$ R9 ]- n5 s+ G! ?; e% |
l(i)=w1(i);
3 _+ z/ E( u) Z6 g& ]- C4 U% @ z(i)=1;
7 B6 m i9 a! w5 G9 ]0 Qend! O/ W, W: t) Q: j& n6 Z; a
s=[];* g/ @6 q" z3 S2 ]/ M
s(1)=1;9 C/ h8 P3 s6 g( } ]6 H
u=s(1);
4 H$ _% J3 S# W" g3 o1 H3 Zk=1;: V! C7 o t, y$ I( i
l;
6 f* q, [; ~9 n: Zz;
/ ?- [# q4 I1 V5 y* I: b0 Vwhile k<n
( k$ g# v" r6 l5 m+ y4 m for i=1:n
( I0 |0 \4 u1 M for j=1:k
6 c, j* I# C- t( t: t if i~=s(j)8 T6 J2 Y0 B9 N+ C
if l(i)>l(u)+w(u,i);
7 w1 e" z- ?* `/ d- W6 y l(i)=l(u)+w(u,i);. q5 G4 B4 D& j; H
z(i)=u;% v( B9 Q- J/ J5 c% ]
end
" t9 z2 `4 R8 J8 o, q end
% Z& t Q7 `9 U* M$ P% ?: s, [) j+ p end3 w, D0 q2 s7 [% y4 q! U
end
7 r' ^, }1 e) `6 k3 f5 M, _ l;
/ x- K4 x% O! m. H z;
1 l9 D" O" @( F; yll=l;
; E: u U6 r) w for i=1:n
2 J7 g7 h$ Y1 t* l& |6 f% k4 o for j=1:k0 s8 [. I6 a9 J# u% B
if i~=s(j)6 h7 [2 |! {- F
ll(i)=ll(i);
1 Y. Q1 D7 _+ U: ` else
* x3 h2 t6 Y1 M" r% s& m; B ll(i)=inf;
* x: o8 C; J' u. s end
7 z# O# q- B2 W- e7 h. Oend+ |& t: p: W: e2 [; |
end
+ F; E5 ~4 v- c0 u# f4 Xlv=inf;
& [9 G G, O/ J' R' h6 Jfor i=1:n
2 ]6 J% A5 @" Y1 e: w* d if ll(i)<lv* [& @, y1 k) N/ W" J k+ o
lv=ll(i);
% E+ u! \, v2 m- A v=i;
7 _4 c* s' t6 C end
+ [! E6 D( v% V$ Zend w. o5 ~, D( g6 W( m* R
lv;: O& O0 Z" D* J9 Z: R
v;
- H/ W: W- k& As(k+1)=v;
0 X+ D9 o8 ^# p5 }4 h. ], a( Ak=k+1;" v F2 [: b6 W* w
u=s(k);
5 W8 K- @$ Z% H9 wend9 W( y2 W4 J8 E
l: C: i. t. f: m
z
8 I. n8 ~+ j( d( t3 B3 b$ D* A# p
) ^7 U; U0 ~" O' G8 U(2) Floyd算法8 `- Z# n: U9 R" @1 ]" [
road2.m文件源程序:4 a) e1 Y" ?8 j
a=[0 1200 inf inf inf inf inf inf inf inf;
# x# d5 P6 Q; {6 B2 o0 G1200 0 12 202 inf inf inf inf inf inf;* k# L" d: }! o
inf 12 0 inf 201 inf inf inf inf inf;/ E# j! Q f! |8 a* l+ G
inf 202 inf 0 31 20 inf inf inf inf;
4 v- i8 h& ?1 l( t o' P; H' Finf inf 201 31 0 10 inf 205 inf inf;3 m+ s" `$ \8 {% D( g* {1 H2 P
inf inf inf 20 10 0 195 inf inf inf;
0 l j8 [1 f# \: B1 x" finf inf inf inf inf 195 0 5 306 inf;4 N" p" G9 _4 ^: s
inf inf inf inf 205 inf 5 0 inf 194;$ U" y* e, D) \2 J. o A& H
inf inf inf inf inf inf 306 inf 0 10;+ E: l3 n/ c" }& O4 A$ B2 X. u0 K
inf inf inf inf inf inf inf 194 10 0];2 W0 X8 G; J: I5 |; v: W" L8 P9 }" T
[D,R]=floyd(a)
8 V( h3 ~* P2 [. m1 p" y# hfloyd.m文件源程序:
9 X3 |+ ]" c0 `+ w6 \2 Y7 lfunction[D,R]=floyd(a)
/ W" X7 R% `5 l' \9 Yn=size(a,1);1 }1 f& p- T2 r; K8 P0 w; q7 U9 Q- P
D=a
+ ?6 {% j3 b5 N% Q0 z! s* y$ @for i=1:n
! V5 L8 U; ], S | for j=1:n
& I+ X: Y; ^/ \ R(i,j)=j;# @8 E) K+ X8 q% |+ ~
end
* i: O Q' l* M' x4 lend
: M; _* \6 m5 ^' _' TR; C: f! K: P. o( C4 I
for k=1:n! n+ M& H, ^$ u& k- Z! [/ |! m
for i=1:n
% Q3 x, O1 C: H; f: U for j=1:n. H- {5 E/ p' l7 R" ?
if D(i,k)+D(k,j)<D(i,j)
' ^9 S9 c9 g; v! `, t D(i,j)=D(i,k)+D(k,j);
( D! z6 U, I' g; a1 n8 Z R(i,j)=R(i,k);
8 n6 Z v G/ ^* y5 _ end
; W; n7 K) Z, y% F7 N1 r5 d3 @9 m" C end7 j. w3 p& V n1 Y3 a
end: u% t; h% n. N0 ~3 K, z1 w
k( H, B' G& Z! v" D7 T/ c3 H
D( r, g/ v2 i0 t6 `0 o, G
R
# T/ q: L$ i% s; L7 `2 e) Eend
; M" P) T9 b2 Z5 _五.结果分析4 d% T- p/ \# Q* x+ l. p
(1)Dijkstra算法
5 T$ l+ P# n8 H/ T: u运行结果:
. g& V5 M" v; q( }' g! Q- Nl = 0 1200 1212 1402 1413 1422 1617 1618 1822 1812
5 A! G- P; W: k+ \z =1 1 2 2 3 4 6 5 10 8
# e. [0 L" S; E# k. q- U1 }( F ! T- A' k+ x r
结果分析:4 w0 F5 D7 r$ h3 M
通过运行结果: 到其他顶点的最短路的权 ,可看出,
7 X u2 N3 p/ M3 p" t 到 (即 到 )的最短距离为1812(km);) V) Y/ q0 U1 ]. c1 ]) e$ V
到 (即 到 )的最短距离为1618(km);9 o( X W w+ _; p
" H/ `. t$ O. v; T% Q! T% @ 到 的最短路径为:V1→V2→V3→V5→V8→V10;' r) V! l9 B. V0 o" h& f8 M6 H
到 的最短路径为:V1→V2→V3→V5→V8。# j: X1 | D, U. S. S
; D! F( N/ f \# d(2) Floyd算法
1 E3 }- u/ _2 w! e& T' i运行结果:
7 l# k% P% M1 u% `3 p( u5 `D =$ p" W- Y2 r9 C+ T/ [
0 1200 1212 1402 1413 1422 1617 1618 1822 1812$ y' H5 Q. }' y) q! a
1200 0 12 202 213 222 417 418 622 6126 H' F" e) u) ^, {6 e/ T
1212 12 0 214 201 211 406 406 610 6000 R% F$ M1 Y- e, j) }' |& U& Y" q1 A
1402 202 214 0 30 20 215 220 424 414
7 K5 W3 ^; B z7 p2 Z" ~# d; C 1413 213 201 30 0 10 205 205 409 399
6 I6 K8 Z0 h& T4 C( v 1422 222 211 20 10 0 195 200 404 394: ]+ X; s3 z( j- T+ k x: d
1617 417 406 215 205 195 0 5 209 1998 ~4 F5 p+ i' A7 f }. W
1618 418 406 220 205 200 5 0 204 1942 U- _# A8 K v; n0 e' E4 a
1822 622 610 424 409 404 209 204 0 10! K* {/ m7 W, T: E' M' D
1812 612 600 414 399 394 199 194 10 0
* F1 b/ h5 X: J! ?
1 c& Z2 g- M$ C9 }R =2 D! E ]! { m$ y
1 2 2 2 2 2 2 2 2 23 E$ c2 Z% X" [ e
1 2 3 4 3 4 4 3 3 3
% q; d) w/ _: D4 ~! M3 f 2 2 3 2 5 5 5 5 5 5; b+ V. X o, y1 Q5 u4 a0 d
2 2 2 4 6 6 6 6 6 67 S% \; {7 H [; p L e. e
3 3 3 6 5 6 6 8 8 8
, _: j" [% Z5 {9 Z# X 4 4 5 4 5 6 7 7 7 75 G+ g! v; I) b2 d
6 6 6 6 6 6 7 8 8 8
! x/ H" Z% \, x) e U4 r% d 5 5 5 7 5 7 7 8 10 10
9 l$ R- X( S( O0 y# [- z 10 10 10 10 10 10 10 10 9 10% N) b" F, v( D6 U& t3 C
8 8 8 8 8 8 8 8 9 10) z/ \" q5 q4 s6 w7 s
结果分析:
+ h3 O1 X7 M( e$ n2 {通过运行结果:可看出,3 Z& Z) q2 i; L7 a4 B" A
到 (即 到 )的最短距离为1812(km);; y, s \- y- {
到 的最短路径为:V1→V2→V3→V5→V8→V10;* w& n& d" @; P) `5 M0 y1 i& F
到 (即 到 )的最短距离为1618(km);- I& x% q8 a% j0 p2 A
到 的最短路径为:V1→V2→V3→V5→V8。/ [5 `4 a' L* F% R
0 ~; h- q. T$ T2 v2 u Y! S
3 B- _, ]' {$ @# m |
zan
|