- 在线时间
- 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]初来乍到
 |
最短路问题及其算法
7 F+ A; e/ k* ?& B1 u! ^# n8 _3 j/ r一.实验目的:
# I* Y! H# d) _- o7 K: M8 j7 I( p* }1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;( |( C( T) U% E6 M
2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.) N! f8 F9 X* i+ Y) A5 f0 ^: e* d
二.实验内容:3 B' y; F8 c, ~9 r" T5 A. \9 I
要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).% _8 D$ t1 u7 R. r1 Q# g: q
为方便计,1km主管道钢管称为1单位钢管.3 @7 u( ]* `1 Y
一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:% {2 _! m9 u0 k
2 b: L2 D6 h( m$ ?8 M1 2 3 4 5 6 7& [" D) ^3 F" e$ z, t
. D: U8 | F7 b0 [. t: y* o
800 800 1000 2000 2000 2000 3000
( y; T; N1 M- x0 `7 `$ p 5 B, G/ b/ z1 }* R
160 155 155 160 155 150 160& h1 b- T! Y7 D% ?3 ^3 K
b3 o- w0 N1 r1单位钢管的铁路运价如下表:5 f1 T7 X* c1 A V
里程(km) 300
# `+ A8 I! A2 J301-350 351-400 401-450 451-500
5 w( f' X; S& x7 b: ^运价(万元) 20 23 26 29 32
?; S4 h8 }4 o3 A+ \: a! T' N里程(km) 501-600 601-700 701-800 801-900 901-1000
- ]% Z1 m: R! l5 L: b运价(万元) 37 44 50 55 607 b8 n* i. w) _: ^2 W9 U% U
1000km以上每增加1至100km运价增加5万元.$ I$ ?! {3 Y" m' ?+ ?0 e. |% I
公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
0 f+ o1 [3 g0 d7 z2 ^假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.7 V N( J+ `; h( n
: E; ^( s+ m9 H% |: r试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
2 ^5 c% s# a& v- K& [4 O9 [7 H三. 模型建立1 H# k) @, H9 L
设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
6 t$ \$ f [9 q 5 k' l" y ^% u7 ^
利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
; ^& c+ x; f; `; I" ^ # |( b; y- @. \1 x( {7 [& e
解:先写出带权邻接矩阵:4 k6 [# P! _8 j0 y% ?
" }' \9 C; B1 q; {) q! H后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
: O) i! |9 }, U+ L- i; T- L四. 模型求解(含经调试后正确的源程序)6 x5 |& A7 K9 U- b9 N8 b
(1) Dijkstra算法: w2 x3 b7 q, M1 S$ u- ^5 a
road1.m文件源程序:
) y3 f0 U) D2 Y7 t( u- ~% cw=[0 1200 inf inf inf inf inf inf inf inf;
; U+ o! q, S' ?1200 0 12 202 inf inf inf inf inf inf;
( R# ^+ V4 T' m1 h" A) qinf 12 0 inf 201 inf inf inf inf inf;" Z7 C7 O( G% U2 `+ r
inf 202 inf 0 31 20 inf inf inf inf;
: y6 k2 ]) D7 ?" y& b0 Y4 oinf inf 201 31 0 10 inf 205 inf inf;/ S3 A. `& k4 C% g9 g) p$ u
inf inf inf 20 10 0 195 inf inf inf;' ]" Q* P3 n [
inf inf inf inf inf 195 0 5 306 inf;
/ {: O! X- r7 d H0 g5 Minf inf inf inf 205 inf 5 0 inf 194;
4 j! f8 I# ^0 y0 O4 M8 ~inf inf inf inf inf inf 306 inf 0 10;
+ m5 d, ^4 G3 d g8 t+ einf inf inf inf inf inf inf 194 10 0];
8 s2 h. t* A" z& o$ jn=size(w,1);- ?" u; _/ x2 w6 R& }$ M
w1=w(1, ;' J7 {8 ?0 p0 o1 [0 i% I
for i=1:n
1 F, k. ~8 \& D3 S l(i)=w1(i);
5 [, P% j# u- z( h/ N z(i)=1;- v" n9 T2 O. h
end
: r! o- B, r; N6 rs=[];! P, G. @7 b, Y7 ?
s(1)=1;
' B1 u- t0 o- j- a7 Z, bu=s(1);3 E. W/ F7 p- a
k=1;
( x: r" R! ]3 d4 k3 ?6 t: fl;: F# s; A. u. @. Y1 d/ \9 u
z;
* c4 _& k& H% t0 O$ xwhile k<n" O+ j' k- a9 u" `! q& d" ~
for i=1:n
9 c0 f3 c* B: \6 U for j=1:k
+ @7 x5 d( r5 ?0 @$ w! j+ Y if i~=s(j)
+ d) E0 I/ B& M$ w2 R6 j y if l(i)>l(u)+w(u,i);" j- c# d2 g% I9 Y4 D( m
l(i)=l(u)+w(u,i);
H1 [! \' [" a, D% W z(i)=u;3 N, ? \; v$ q% U; }8 P
end
2 b8 b t" I/ `4 |# n H end$ o4 u8 ^( {6 h9 \1 O7 C
end
9 Y" E' S9 k: Q" Iend/ g0 L" M1 \. h2 F7 f) i" D$ D
l;
% [8 [5 z( }( L- L G z;
, T6 l1 X1 P5 h. ?2 mll=l;, e% V q. x% G, C
for i=1:n
; \' J' e i9 h1 O for j=1:k- H0 _8 P3 q6 q1 }6 l0 a! W
if i~=s(j)
, M% s* Q- \0 q/ R ll(i)=ll(i);
( R# E+ l% u I else D6 [8 a' B; K5 O; T
ll(i)=inf;. s7 M5 G- [: J/ o( M; m y' I
end" g a L# F W6 l S
end; V$ T' Y, T/ l' R
end
/ J! |5 n. [4 X+ flv=inf;0 I7 {" ]! u. |
for i=1:n
" o K' B( L6 P if ll(i)<lv
) N B" p- S' c lv=ll(i);, b1 S# I n1 R( w+ C
v=i;
+ m; F) a+ }6 {$ U# U end/ |0 k2 Y/ C: L" O+ p- }7 ]2 W
end
3 B1 t/ o9 W" a$ [1 {lv;
- M" k' C9 b) E; L1 Q( }2 f! Nv;1 |+ J, X% I& Y, m2 O. n- v" V
s(k+1)=v;* m9 f3 c$ @1 d' @+ j
k=k+1;
: z. e- c; u, z2 h& Z: iu=s(k);. l5 o" _1 J9 G( A+ K# S/ n8 n
end
9 V4 |' E# Q9 o) b% w2 ]l* k- n0 g' A1 \! t
z; r1 j0 B2 d" A7 B
. |" H% v0 v# I- \) |$ C- w1 |! Z3 [
(2) Floyd算法* c3 @6 L3 {2 k
road2.m文件源程序:* O, N8 W8 {. L+ P( b0 |8 F
a=[0 1200 inf inf inf inf inf inf inf inf;8 J9 G2 k% }$ E8 Y- M2 Q4 u: l! k
1200 0 12 202 inf inf inf inf inf inf;
$ o7 Z+ n1 c% j O4 Q b! Yinf 12 0 inf 201 inf inf inf inf inf;! E+ {1 f9 n) Q
inf 202 inf 0 31 20 inf inf inf inf;
0 i! }& b; z2 `1 `5 Cinf inf 201 31 0 10 inf 205 inf inf;% Y3 ?3 u* n2 o8 G9 [; c
inf inf inf 20 10 0 195 inf inf inf;+ {8 {& P2 Y6 h h% _; ~+ @. D! e5 S
inf inf inf inf inf 195 0 5 306 inf;
- N2 Z4 N& I* f) \! i: Cinf inf inf inf 205 inf 5 0 inf 194;
% c- [0 l/ @) U& a& ^inf inf inf inf inf inf 306 inf 0 10;. G+ G5 E( x+ z$ Y5 i9 _% t% J: u/ B
inf inf inf inf inf inf inf 194 10 0];
5 R4 S; E# M$ \; U$ X[D,R]=floyd(a)+ Z! s: y1 c$ U9 z, e' J, m r c+ N
floyd.m文件源程序:) z2 J' m9 k2 O/ M; E: q( ` @
function[D,R]=floyd(a), X' N# ~! e# d: d) t9 h# T
n=size(a,1);1 Y! f& K8 @9 M" o
D=a
5 f" _9 X- X0 K/ Pfor i=1:n
4 o. W6 V. L# E$ X4 N! Y4 N* ^ for j=1:n( f) ]& d8 |5 Q
R(i,j)=j;
" D3 q1 Y+ Y3 D/ }, Z end
' U3 I$ D* g0 f, t4 |end
0 t# S/ ^, N) R& X1 {$ T# zR; e9 z( k# B2 Z5 o$ T
for k=1:n1 h# v% X3 t" |/ e; E5 v
for i=1:n
$ `! f @% p) O. Q, Q for j=1:n0 B, Y3 @! L3 ~ ?1 {- a+ w; c5 [0 s
if D(i,k)+D(k,j)<D(i,j)1 s* W) y1 g, p6 ^% k% k3 D/ A0 `
D(i,j)=D(i,k)+D(k,j);
& a. K; z# U P( K9 u" H R(i,j)=R(i,k);8 Z# X5 w A5 ~/ B$ K
end
8 M6 Q/ d1 C6 q end# J: ]% i4 v) b, Z4 M9 I
end
: m) e% `6 g* q k
% O' Q3 x% k& i/ E# F! ^ D
! j' S: w6 Q5 ?7 k0 l2 a6 x+ ] R
, r& n" y- q: j/ K& s) Send
$ d# C ], \" W, O: v9 I+ W& I1 H五.结果分析
- ? `5 F3 _9 W4 E8 s9 m- Q(1)Dijkstra算法7 Z8 n8 A4 f9 @$ x2 {# C" Q, P, |
运行结果:
, ]1 D2 R3 m5 n h1 ll = 0 1200 1212 1402 1413 1422 1617 1618 1822 1812
( O2 P b% | b* q' Iz =1 1 2 2 3 4 6 5 10 8
6 q) Q$ L7 ~8 G. [, l$ P* ~
( D) e$ ^- `/ I1 d+ Y# k( M结果分析:2 }; W' D- M; K
通过运行结果: 到其他顶点的最短路的权 ,可看出,
+ n- I( I. s" u! Z L7 C! L, w p! O$ G; T 到 (即 到 )的最短距离为1812(km);
* Q' D+ A. b( u3 V- ] 到 (即 到 )的最短距离为1618(km);; m$ }7 C7 l5 f Z ]
& Y. w/ I @7 K+ v
到 的最短路径为:V1→V2→V3→V5→V8→V10;. d9 ~/ F$ \. U4 q `6 q, T
到 的最短路径为:V1→V2→V3→V5→V8。- T& G2 v: X$ N5 Q& f3 H
; h6 D5 H+ \$ ]( e( R(2) Floyd算法
* M" l+ }, X0 U! W1 P3 O运行结果:6 X; }$ }2 i8 u* C) K9 U9 W: t
D =
8 N* ?, L; Z! Z( `. Z 0 1200 1212 1402 1413 1422 1617 1618 1822 1812
; [6 S3 v6 p, L! A+ v7 W; B3 J( ^ 1200 0 12 202 213 222 417 418 622 612" S" h: x* S( Y* A, {: V/ ~
1212 12 0 214 201 211 406 406 610 600, Q5 y5 J+ C0 z; I. I
1402 202 214 0 30 20 215 220 424 414( J7 Z8 H- }( m% E% p$ |- k
1413 213 201 30 0 10 205 205 409 399 V" @. L: ?0 s9 ~
1422 222 211 20 10 0 195 200 404 394/ k2 g5 B% H: A# [" A2 L9 G* N# _
1617 417 406 215 205 195 0 5 209 199
2 W& _7 Y9 O! @ 1618 418 406 220 205 200 5 0 204 194
0 b4 m5 ]7 a) m7 U# L% @ 1822 622 610 424 409 404 209 204 0 10
5 L; U0 D2 [3 k3 W& ?% k 1812 612 600 414 399 394 199 194 10 0
. i/ [4 l) f# V/ u& ^4 t) S+ y3 L( L% |6 q; u
R =
% r H: f- r3 O* a. Z" F( i: ? 1 2 2 2 2 2 2 2 2 23 q; h' L5 @) ?( v
1 2 3 4 3 4 4 3 3 33 i: \" q3 k" _! B6 @+ W
2 2 3 2 5 5 5 5 5 54 A" u: Z3 v6 ~1 @( V% a& `
2 2 2 4 6 6 6 6 6 6
8 k& i/ K1 u! w, J# o' D 3 3 3 6 5 6 6 8 8 8. q/ L8 u# @1 v; `
4 4 5 4 5 6 7 7 7 7! w( U' @; b# `' j U3 G/ ?
6 6 6 6 6 6 7 8 8 8
" b! W8 | L/ ?0 S) }7 `; y" [ 5 5 5 7 5 7 7 8 10 104 ?2 e4 L" l, }+ f9 Q
10 10 10 10 10 10 10 10 9 10
P8 F) g7 A# E1 m( V! a! ~: I7 J5 G 8 8 8 8 8 8 8 8 9 102 R! ]3 @& ~4 L/ F) A ]0 S
结果分析:3 _% X# C1 ~! y! q5 H
通过运行结果:可看出,; Z1 E0 r; K2 l4 U5 g
到 (即 到 )的最短距离为1812(km);" X+ P P4 |8 c& |4 ~( s
到 的最短路径为:V1→V2→V3→V5→V8→V10;
7 q( x) \9 d$ k2 f8 @7 ` 到 (即 到 )的最短距离为1618(km);
! H4 Q% n. K2 y( p8 P 到 的最短路径为:V1→V2→V3→V5→V8。
& \- }& m6 Y C+ `5 g5 g0 k
. b" E1 W0 Q! q G0 g4 _2 B) k/ A6 l1 B/ Y: d( j; X& i
|
zan
|