- 在线时间
- 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]初来乍到
 |
最短路问题及其算法) m' T" N( ]9 ]! N3 A1 a, L
一.实验目的:
0 [' ^( {! B8 ^5 v' c% E1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;% n+ b m7 e0 n+ ^5 |7 \
2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
( }; E4 t; |, P# a4 t二.实验内容:0 L+ @1 F% i1 {2 F4 |
要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).. p1 }5 ]7 E8 K' H
为方便计,1km主管道钢管称为1单位钢管.
+ L7 l' J ~3 j: T9 P% `1 B0 |一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:0 x. q1 A+ t3 ^# h- l
4 ~4 I5 n7 `( Q0 z b1 2 3 4 5 6 7
7 j; O( k2 r7 Q& `5 O$ Y: F6 b+ n ; Z4 ~& b& }1 x! R+ O
800 800 1000 2000 2000 2000 3000
# r: N5 [( A$ X8 q* W5 Z- R : F* B% z% G+ J; u2 x9 s
160 155 155 160 155 150 160
. t" l' k+ l R! L' n- a) d5 U' `0 H; O
1单位钢管的铁路运价如下表:
, ?! a) X; [% M2 ^. R I y里程(km) 300
* P1 l; t9 l, w/ J- g301-350 351-400 401-450 451-500' S! Z/ }4 {+ Q9 c/ c
运价(万元) 20 23 26 29 32
0 s4 ?" {7 w2 _' f* O% _里程(km) 501-600 601-700 701-800 801-900 901-10000 R& F- Z) |+ R) G/ T6 l5 R" R
运价(万元) 37 44 50 55 60
# f u4 G/ V! }; |: u1 B1000km以上每增加1至100km运价增加5万元.
$ j9 T8 O6 c: U6 [3 ]( a5 R公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
1 j# G, o2 F/ R, E6 ?) Z. K4 L1 L假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.& U9 _( O1 E5 H2 F) S! O1 d
. N) W4 n9 U! W
试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.4 P+ q6 R, H% ] Q" \, p) v* k3 [
三. 模型建立7 p5 ~; f# T( w
设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :9 Z0 ^' w" M- v# ^5 Y8 m4 f) X
; y8 x/ L9 |& A" F利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离- N9 z6 _2 `* e8 z* C2 v# G
) L; m3 A q. z; e解:先写出带权邻接矩阵:" c0 U3 R2 U: @+ P; ]7 l6 R8 d8 c* P
: |, X9 H& U3 f后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
( [8 _3 s8 f/ k9 {" t8 d' ^/ k& k4 j四. 模型求解(含经调试后正确的源程序)# w9 p( }- h2 F2 F
(1) Dijkstra算法% @2 e( T0 Q4 S, S8 Y
road1.m文件源程序:
( a; @9 [5 U1 z+ Y3 }w=[0 1200 inf inf inf inf inf inf inf inf;8 }9 b8 H; G5 J* S* \/ O
1200 0 12 202 inf inf inf inf inf inf;- d: D9 Q! J5 N0 o& n( y' W
inf 12 0 inf 201 inf inf inf inf inf;
( o1 e& {! c) p2 W2 einf 202 inf 0 31 20 inf inf inf inf;" l# N) u+ b" ^# [! Z
inf inf 201 31 0 10 inf 205 inf inf;+ c5 T- B. l ^, u
inf inf inf 20 10 0 195 inf inf inf;% _2 J# K" @# {
inf inf inf inf inf 195 0 5 306 inf;: @0 d3 I; _1 ^. }- Z3 l
inf inf inf inf 205 inf 5 0 inf 194;! _& e: I& l) p5 g
inf inf inf inf inf inf 306 inf 0 10;- D7 [1 \) l; f9 g* K5 u
inf inf inf inf inf inf inf 194 10 0];
2 X# f x2 T7 s$ A2 @0 zn=size(w,1);: f0 ]. Q8 A9 I7 o& q
w1=w(1, ;' \4 {2 f1 |; G/ y" O0 D+ J
for i=1:n* d4 j3 x( v$ c. I9 F
l(i)=w1(i);
4 |9 N. R/ n0 Q1 a! b& J& c. f& b z(i)=1;
% l) h& Z3 M0 E% p. ]2 iend# p9 v. H1 m9 r! [
s=[];: z7 E6 G6 K- [ v, i/ i1 V
s(1)=1;
9 ]% S4 g: Q. `7 {! ?3 l! H: eu=s(1);& _4 U# m1 `6 M2 t5 L9 h
k=1;7 {9 N9 K' v1 C& a4 R
l;
$ i6 x5 C$ y. z) n. iz;
2 @; a. Z2 x. M9 B \while k<n
" A8 |, J9 \7 X. m for i=1:n
6 ^) A+ N$ @6 O, d. w7 z) l% T3 J for j=1:k; E3 y1 L# J- N
if i~=s(j)0 \( ?+ Z* k/ y5 ~+ |+ X) p, `3 o5 {# K
if l(i)>l(u)+w(u,i);6 O9 x) \( \- x2 t! B4 g4 z
l(i)=l(u)+w(u,i);
* h( b$ a; O M z(i)=u;
7 {8 H) J4 k% l: |) d- f3 ^ end) D" i* ]6 V3 D6 {2 u
end
/ _, k! H; Q+ Q) y* F. A, O7 N end! q7 v7 G: M# Z) s( ^ [
end
8 R& s6 k. I5 X0 R l;
- @1 b F( n, H- ^ z;
, s$ Z2 j2 J6 h) i8 X! bll=l; ~8 b" t& _! T) u- b
for i=1:n
( L6 Z+ _! n. Q6 w* b for j=1:k2 v9 ?1 V; `8 k7 I, d" o
if i~=s(j)
- p9 x+ B3 \2 S9 ~" d3 b7 L ll(i)=ll(i);
! \: E2 L9 r5 m! r5 N8 _ else
: \$ q H, N, j" K/ x. t. ~6 h2 i ll(i)=inf;
) @( L) S) r4 S" g1 [) z; r+ G1 a end6 r T, Q8 H) N) u% o4 |
end6 S1 E6 X S$ |* w, k
end: Q" W# a y- ?- E. @" F3 r
lv=inf;7 f$ b0 x* L1 T: _ x9 V
for i=1:n
/ }' T' q5 t$ D6 M$ `+ D/ d if ll(i)<lv$ V/ d# \# D3 Q4 n- R3 r0 d+ v
lv=ll(i);
$ m: ?4 _% Z/ O3 y v=i;" ^; _7 d" o1 W, n7 D9 ~- D+ R4 }: i
end! u, R/ ?0 |! L9 q4 a
end, \3 y% e+ n; X. V5 N2 W9 V1 @9 b/ v* s
lv;
8 ]* y6 q: F+ N5 n3 Y9 `" Qv;
0 s9 R; M6 w* U* l" Ks(k+1)=v;
4 R* Y9 K. f+ ]& v4 y+ X8 r9 Ak=k+1;
( V2 _2 T! o8 B( E* Ju=s(k);
/ M- [) D4 l: u& j G& V7 cend/ R* ]- r/ D: f. Q. q0 }) l7 z
l
1 X- `& T$ C7 x) Az$ w9 P; X% v1 Q7 A! x! {
- o7 `( B% K7 s& B! R! {
(2) Floyd算法2 l6 l4 s) D8 X5 b
road2.m文件源程序:# Y$ v" @3 y1 I' ^, R
a=[0 1200 inf inf inf inf inf inf inf inf;8 k0 x2 k- O4 ~* \( q0 ~: _& u
1200 0 12 202 inf inf inf inf inf inf;
! K" U5 q& H3 j. ~: ninf 12 0 inf 201 inf inf inf inf inf;) `4 w" U7 p3 i% n5 U( J
inf 202 inf 0 31 20 inf inf inf inf;7 B( b3 D6 K [9 y" _4 ^1 ^
inf inf 201 31 0 10 inf 205 inf inf;
# j$ a; h' u( x8 O! B8 Y8 _- finf inf inf 20 10 0 195 inf inf inf;( t; }! p) B; j. U; ~
inf inf inf inf inf 195 0 5 306 inf;2 \9 b: l D% p$ I
inf inf inf inf 205 inf 5 0 inf 194;, f+ k! C& R" I0 n0 J ?% t/ ~& T
inf inf inf inf inf inf 306 inf 0 10;, ~+ ^/ D& v2 ]- R
inf inf inf inf inf inf inf 194 10 0];
& x- \0 w+ ~" g2 L' u2 `[D,R]=floyd(a)% C t! \' D! r5 g3 J
floyd.m文件源程序:8 e- h% k7 S& ^' l1 q" A0 r" u
function[D,R]=floyd(a)2 T( q6 E1 J% G
n=size(a,1);$ n% G2 ~1 u" Q. V
D=a
4 x/ a" H3 M2 M- Ufor i=1:n1 [# H& ?* @1 \& y/ f
for j=1:n0 [ l% \. U6 U) |
R(i,j)=j;3 |% F" |/ S, A8 @1 v' W% N
end2 j9 v+ Y& _: ?$ l. l
end" p4 M. K/ Y! { ? q' \
R
9 [! p4 s# V% e; V0 E2 Yfor k=1:n; k" I- P3 H8 l/ H% k. N: s
for i=1:n
0 m1 ?! j: s3 A# T! O7 C8 D3 S for j=1:n
( K8 P- O2 h7 }+ f2 p if D(i,k)+D(k,j)<D(i,j)
' Q* M$ D& J7 n D(i,j)=D(i,k)+D(k,j);- p3 I+ u) T7 b) z
R(i,j)=R(i,k);
! L. N$ K" ~8 U" B# K: ] S6 } end" }! }5 c L& i. k1 @
end
6 }% A6 w$ y$ }: c3 g& L6 R. ? end
" L+ x) H3 g& r k
9 o) n9 |' X* h' `5 \; j4 f/ g! b, q D. M6 m/ U7 n$ c9 s- S
R
P* c; B2 M, ^; f- i6 v3 N$ Hend
) C9 g0 E! _8 }& I$ q9 u五.结果分析8 L, m- c- e) f# }5 G( l; A
(1)Dijkstra算法
7 ?+ {- K6 g% t) l运行结果:( _0 J8 I4 t& {: q$ a
l = 0 1200 1212 1402 1413 1422 1617 1618 1822 1812* V/ i9 l2 w& Z: M3 {( P# k6 C
z =1 1 2 2 3 4 6 5 10 8
0 k$ @" \. F- L2 S ! ~* r1 p9 c3 `6 r! k1 S; b8 \* a( k
结果分析:
9 l& v" T, W6 u( x2 T0 h通过运行结果: 到其他顶点的最短路的权 ,可看出,. F, ^2 W4 I; Z# [8 l' r; O
到 (即 到 )的最短距离为1812(km);5 Y2 f3 {: a& c- h& ^8 ]
到 (即 到 )的最短距离为1618(km);
- k, T& l( V7 Z1 G" r+ g- G: }2 R8 O1 a# O6 C4 R( s& I
到 的最短路径为:V1→V2→V3→V5→V8→V10;6 T$ X/ v* C4 C
到 的最短路径为:V1→V2→V3→V5→V8。/ S* @, N, O! Z3 t; a# g& Q
$ |0 C- Z. @4 \+ l
(2) Floyd算法9 J& V5 k6 B: }7 r/ z
运行结果:
: x5 Y8 v2 @3 n; Z' _D =( y: \0 g6 W* ^1 }2 N5 q
0 1200 1212 1402 1413 1422 1617 1618 1822 1812
$ x7 c) n) ^9 j5 ?5 f% `3 \ q6 B 1200 0 12 202 213 222 417 418 622 612
' O/ I; c) x+ a) l; y* x6 {. T 1212 12 0 214 201 211 406 406 610 6004 e4 q- r6 k6 } X# p
1402 202 214 0 30 20 215 220 424 414
& p2 S5 ?. K @5 Z5 ]) B4 L' b 1413 213 201 30 0 10 205 205 409 399
- @9 `2 k" }% T7 d" n: H 1422 222 211 20 10 0 195 200 404 3942 H; C. W7 t5 D+ X k+ G& J) U
1617 417 406 215 205 195 0 5 209 1994 E' _- q, K+ e* `* ?. J
1618 418 406 220 205 200 5 0 204 194
1 v7 c$ q" u, S; H6 L) P$ F: v 1822 622 610 424 409 404 209 204 0 10
- G: e4 |4 X2 C2 k 1812 612 600 414 399 394 199 194 10 0
" y: F" y% n* m: g8 ~( V
0 A7 G/ C3 L- l' ]3 E( a5 SR =
2 l' z. b7 l" ~. ~3 ]/ |8 n, R 1 2 2 2 2 2 2 2 2 2/ t6 l# `) a9 T7 Q
1 2 3 4 3 4 4 3 3 3! [; ^8 e$ v, b6 \
2 2 3 2 5 5 5 5 5 5* [" q6 A* n. E' Q: _' ]3 r
2 2 2 4 6 6 6 6 6 6) L% g$ m, j1 Z- K: |
3 3 3 6 5 6 6 8 8 8
- M$ A2 M; ?3 ^7 N" A- j& X, J0 D 4 4 5 4 5 6 7 7 7 7, G% \7 m# U+ @! c
6 6 6 6 6 6 7 8 8 8) ?: ]& k3 R1 m4 {8 ]6 G
5 5 5 7 5 7 7 8 10 100 m$ h& C7 ? u3 T4 z' b( N
10 10 10 10 10 10 10 10 9 10
n- z y( J# U6 j# ` 8 8 8 8 8 8 8 8 9 10
# e3 G d) x! D: p. ]. B1 Q结果分析:2 l4 c1 a* O7 w! `- l5 u% z
通过运行结果:可看出,
8 G2 f7 k) X$ f: U 到 (即 到 )的最短距离为1812(km);$ U! z) k* ]. ^6 i; z$ Q& ]. N* @
到 的最短路径为:V1→V2→V3→V5→V8→V10;* ]% d# k) N! `- U6 ~6 q
到 (即 到 )的最短距离为1618(km);
/ h( [, y# m2 m7 N* B1 P 到 的最短路径为:V1→V2→V3→V5→V8。 _) \0 U5 p# L) f# m, R6 m Q
7 [! k) ~4 r( S/ S' p) x
4 h ?4 P) \6 D6 T: P0 z& S& X0 Y8 \ |
zan
|