- 在线时间
- 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]初来乍到
 |
最短路问题及其算法
" Z+ \) K% I0 C8 l/ c# i, y一.实验目的:
$ M/ Q" p7 i; A, [* C- t1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
; H- R- |( X* z. e# ]2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.' T! H6 Y4 Y ]8 W+ `1 Z
二.实验内容:
/ E6 m, [3 `- _2 E9 P( g( q# c要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).- q3 U# b) H* x9 n9 ?: \
为方便计,1km主管道钢管称为1单位钢管.
+ }8 H# `& c; o' z7 C一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:+ o; a# f' b! w1 |0 C
7 N4 B9 L/ M! E1 2 3 4 5 6 71 O' U; D% n8 ?
( r9 k8 Z! s$ ^* B5 a+ O/ S8 S, h# @800 800 1000 2000 2000 2000 3000% F k* g5 ~, L/ l1 I) C. v
K9 |& ~( w& @160 155 155 160 155 150 160
6 c! D- O8 r, M# E
8 G& y& x& m' k1 |/ ? q& s1单位钢管的铁路运价如下表:
' `, y0 r+ R# W6 `! r, v/ I- Y3 X里程(km) 300# y# M! U2 y3 o' ]5 g
301-350 351-400 401-450 451-500
9 d! P+ `2 E2 [8 x运价(万元) 20 23 26 29 328 w( A) |6 O) q
里程(km) 501-600 601-700 701-800 801-900 901-1000
, J3 U. ]6 Y9 }运价(万元) 37 44 50 55 60
" E. Z+ \% `7 ^( ^/ X7 x- z1000km以上每增加1至100km运价增加5万元.* a" F; S, P" Y$ y2 i
公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).$ F4 j, u3 T4 A% I" C
假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.$ i3 K) X% p, I) n/ k t" h
% T0 O- f0 L1 y试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
( I' o) N3 n- H0 V8 X9 f- L三. 模型建立/ Z1 X; E9 j. n- W
设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :# ~1 \7 o3 I, [2 T! K) a
: X4 l* F7 v) V; E) k利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离# w/ f; s: U* [4 _
* s. u2 W0 `3 c解:先写出带权邻接矩阵:
: s9 _- [8 t2 q$ r% C
7 Z# C0 }: P7 h) X3 d: ?: d8 q后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .+ \4 `& F Y0 Z2 Q
四. 模型求解(含经调试后正确的源程序)0 \& d% o+ l, a" |% @5 H/ l( F
(1) Dijkstra算法& N& E9 }' T" d& Z& h
road1.m文件源程序:& [/ b1 _5 |. [$ i6 {- b
w=[0 1200 inf inf inf inf inf inf inf inf;
' o1 ~; J* f3 A, d) M$ x8 c5 C# }# ~1200 0 12 202 inf inf inf inf inf inf;+ c2 T" P3 X6 Q! h" p( L
inf 12 0 inf 201 inf inf inf inf inf;
, M4 m5 Z; S+ y( binf 202 inf 0 31 20 inf inf inf inf;
4 E0 N; x- |6 o2 o$ j6 H: n2 dinf inf 201 31 0 10 inf 205 inf inf;
|, J4 {: f1 Y- \1 e; C# T/ y9 ~inf inf inf 20 10 0 195 inf inf inf;
4 ?5 @5 H$ x. f" linf inf inf inf inf 195 0 5 306 inf;* ^4 y. J/ o! q* r( D
inf inf inf inf 205 inf 5 0 inf 194;+ Y: [6 r# \( `8 I$ G8 U
inf inf inf inf inf inf 306 inf 0 10;7 ^0 t9 z" P1 [0 l. F" c
inf inf inf inf inf inf inf 194 10 0]; 3 {% B6 Y7 k* T6 c6 I! _
n=size(w,1);
0 C! a0 [5 D2 M; x3 nw1=w(1, ;6 e" ~ y9 U# S0 x4 f
for i=1:n
6 U' L/ W1 S0 Z W9 `7 w' |# G5 K l(i)=w1(i);) S, H0 E4 {* K3 M3 R+ d' k' p
z(i)=1;8 a! ]- z% m0 ^% v4 j+ X ^6 e+ y
end4 @7 C$ A" K5 i/ K4 X: I6 J
s=[];2 w: C. i \- ^2 u' k0 W: J
s(1)=1;
" E/ d4 J8 `0 X1 k. ou=s(1);) }6 h4 u) E% o# A# t; ?
k=1;
0 N1 ~$ j% `, K; \6 R: _l;
! t: i7 E3 i, ]- O0 T1 _& S" a% _! jz;( b) E4 F' A- X: q
while k<n
+ l" a/ l B. p8 d: V5 U for i=1:n
' k0 O& _3 _/ W# I* s0 c# ]3 K for j=1:k- h* V7 a1 G: n$ b2 c! s' T2 W
if i~=s(j)
5 W+ P* ~$ q( }% n1 g% q3 I if l(i)>l(u)+w(u,i);
1 X b' P: h8 S0 I0 s5 ~- Q l(i)=l(u)+w(u,i);
/ C! A. n0 r& w7 I z(i)=u;- R( L6 p1 K0 t( P7 J+ P3 R4 y2 w
end3 r3 ?) y2 ]7 {7 r1 K
end
6 f$ t- w/ S: X) v4 }8 [ end. e3 g, q" |" y F2 V$ D" k7 W
end# K' j$ [* b4 g2 U/ x& ?
l;
! L! b0 I2 H( U' ^ z;
) s. S2 z, h, ` t+ P& b0 B/ Mll=l;5 z6 J# m' L0 q4 S, X" l) ]0 X1 T
for i=1:n0 V( Z! V, T' c' I/ M4 m
for j=1:k
, X( p' U: h7 c1 D8 A2 ~3 ~+ M if i~=s(j)
$ P* E( J4 y* a; X: j4 g- O4 R ll(i)=ll(i);
6 D- ?! G/ d# r* F* { else: z' n8 F) K% l7 r
ll(i)=inf;
5 v3 ?8 k, I# \0 C( o- g end- b9 b, r; J$ @0 m4 P. G
end: Z9 O% C- \1 J* h- U
end
' q+ P5 s( K+ E+ Ulv=inf;2 ~- o% u9 c# c6 n! z8 i" X$ _
for i=1:n
5 Z: ?5 e) R5 ?$ s6 Q6 u if ll(i)<lv
# a; P2 S0 O, q- w' R lv=ll(i);
3 g0 m3 \* ]. ] v=i;( ?" t+ ?' o9 `3 G, U
end
% r7 V! J0 C6 F: R& z/ Z9 G8 J: Bend
2 V1 A N( u" } t/ V6 {/ p3 elv;, b% r% q% I. d' R
v;& U8 a7 j, t+ [
s(k+1)=v;6 l! |1 C" {* ]$ k, \* S
k=k+1;
+ T4 Z* O: M* h' Q6 lu=s(k);
$ a' b, i* P# wend
V: n" ] X- U- E+ k5 V+ ]2 _" el6 \3 Z% p2 f1 e9 G
z7 x9 F- {; @+ ]" @
% A3 T: o9 o8 K
(2) Floyd算法- ]/ G4 C# }+ F z0 m" [7 H
road2.m文件源程序:
! U& T, \3 h l) ?3 Aa=[0 1200 inf inf inf inf inf inf inf inf;
. m; ~; G, c5 ?4 L1200 0 12 202 inf inf inf inf inf inf;" Z/ ]# T$ h1 ~" J- w$ M0 W
inf 12 0 inf 201 inf inf inf inf inf;
; l3 ?) r9 Z- Y% T& D1 Rinf 202 inf 0 31 20 inf inf inf inf;
) a1 Q: ]' { d4 D" H/ Kinf inf 201 31 0 10 inf 205 inf inf;7 T$ n6 q7 y7 J9 v7 Z7 Z4 j
inf inf inf 20 10 0 195 inf inf inf;/ J! Q5 E/ g7 E# I
inf inf inf inf inf 195 0 5 306 inf;
! [1 O5 v% R7 r. einf inf inf inf 205 inf 5 0 inf 194;3 o' t4 d; i, L
inf inf inf inf inf inf 306 inf 0 10;' P) h* u( [; Q* I! A. a; j
inf inf inf inf inf inf inf 194 10 0];# F7 q% F; j9 X0 X% C
[D,R]=floyd(a)
+ y1 N% C% W: ]floyd.m文件源程序:$ k; V# W$ Z3 x4 X5 `
function[D,R]=floyd(a)$ |% R; F2 f j" Q& j0 R y. R
n=size(a,1);; \6 G1 W( _8 ^& F5 O% h8 Q
D=a5 }( S3 D- J5 G& n/ h+ s7 ]
for i=1:n: d' E- g9 |" h7 ~' Y
for j=1:n
8 L7 G3 \, l0 a i( \ S. Z0 B R(i,j)=j;4 j" z2 J/ k" Z8 m2 h3 o
end2 o9 r6 d; X. T) }5 ?0 B% Z. s
end$ R# {. Q. M4 C. U8 f$ S3 {
R
7 ?% U4 E; f+ c. E% z0 wfor k=1:n' o: I* X! c3 W2 z8 ~' _- i9 j
for i=1:n8 L) J2 {; A$ N/ w; N8 U: J
for j=1:n8 e* |' k% C& z
if D(i,k)+D(k,j)<D(i,j)/ K' g* q8 Z. C2 t) r
D(i,j)=D(i,k)+D(k,j);! j+ p7 u# J/ C T0 |2 B, {" q
R(i,j)=R(i,k);6 O. t+ D. f$ d
end# e$ R1 K4 b3 q7 E
end
6 o- j5 r) ~( \/ |7 C7 e end
6 M! x6 |8 h# r" Y; A k
5 X9 `: N ~: j0 D D: M! r# J# w$ s& \, X$ P
R' o, o+ i& [$ c! G: W
end/ {2 v' @6 N \( Q2 \2 A
五.结果分析* c& V, q q5 s$ ]
(1)Dijkstra算法 I/ y- @2 h1 ~$ n. d% `
运行结果:
: S" v @3 O( h, Z3 Z/ Wl = 0 1200 1212 1402 1413 1422 1617 1618 1822 1812
: x ]/ G) ]3 v. s; l" Qz =1 1 2 2 3 4 6 5 10 8: n a, p$ n! Z- U
0 j) f3 \$ e" n4 d& U% |
结果分析:4 N7 l6 i3 E# X" l, ~+ w7 B0 W
通过运行结果: 到其他顶点的最短路的权 ,可看出,
1 @4 \& l; e% k0 E+ a: A2 A8 P 到 (即 到 )的最短距离为1812(km);
: z" G* t- {; {4 t( X# ~ 到 (即 到 )的最短距离为1618(km);
8 f* q# c8 C7 Q' z. m% v5 }! W/ J5 n4 t
到 的最短路径为:V1→V2→V3→V5→V8→V10;! y& c4 g {- V! |+ i) a
到 的最短路径为:V1→V2→V3→V5→V8。
1 R( @5 o% c5 D$ [; _ T' {
* C# q2 ]; w: N7 B9 s( A% Q/ q8 H(2) Floyd算法1 \! ?; P& U3 I* E, M
运行结果:5 z, A4 u) q$ @6 L
D =$ ?! f6 [# k; a4 ^, W2 j6 `
0 1200 1212 1402 1413 1422 1617 1618 1822 1812
* R, V: Q2 @5 z7 G" t) L% Y 1200 0 12 202 213 222 417 418 622 6126 d) E2 k) h/ k* ~
1212 12 0 214 201 211 406 406 610 600
: s4 D2 l4 f. ~ 1402 202 214 0 30 20 215 220 424 414
/ y( A0 f& M/ w 1413 213 201 30 0 10 205 205 409 3995 k+ s" K" K7 h: W; I
1422 222 211 20 10 0 195 200 404 394
8 Y* D. D0 S4 I- [4 f+ b 1617 417 406 215 205 195 0 5 209 199: ~: e& k8 P; F, D1 k: i0 ?& n
1618 418 406 220 205 200 5 0 204 1943 ^- B+ q9 l+ o/ N2 o
1822 622 610 424 409 404 209 204 0 10* s! q& c e( g# j, Y2 a
1812 612 600 414 399 394 199 194 10 0
1 D) ^: N/ L4 R: w
: k! H( J$ B, f( X' @R =& U& u. W. m6 `7 e: }8 l) C
1 2 2 2 2 2 2 2 2 2' ~$ D6 v$ [! X, l9 g7 n. b
1 2 3 4 3 4 4 3 3 33 I& @) r" y6 d4 h2 e, @
2 2 3 2 5 5 5 5 5 5
! T) R7 _: r' t! y 2 2 2 4 6 6 6 6 6 66 C. ^: q" r* T' l
3 3 3 6 5 6 6 8 8 8
" T0 S/ w& x5 W6 | C 4 4 5 4 5 6 7 7 7 7
3 M8 i9 T. L2 u- G( d* K 6 6 6 6 6 6 7 8 8 8: R. w& g- d6 X; b3 U- U4 T
5 5 5 7 5 7 7 8 10 10) k0 w( C5 @% |9 v
10 10 10 10 10 10 10 10 9 105 W8 R; \$ K, e$ E- m+ N
8 8 8 8 8 8 8 8 9 10
3 {& Q4 P+ ]) m/ c. d结果分析:
" u1 _# p. n8 x; J4 @' i通过运行结果:可看出,. V+ I5 _8 ^" W+ S! i* D4 Z6 Z
到 (即 到 )的最短距离为1812(km);1 Q4 |! F4 m; i. b& G( c% F6 f; S) P! `
到 的最短路径为:V1→V2→V3→V5→V8→V10;
# J" x1 S0 P b8 _" p 到 (即 到 )的最短距离为1618(km);$ Z F6 A& m0 n3 o) e4 f
到 的最短路径为:V1→V2→V3→V5→V8。
7 z1 @' c4 G+ W. L3 p6 w2 j% h2 i' x7 u( {& I5 c! x
* G5 H! K& k$ r7 [( Y |
zan
|