QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2862|回复: 1
打印 上一主题 下一主题

[课件资源] 最短路问题

[复制链接]
字体大小: 正常 放大

2

主题

1

听众

14

积分

升级  9.47%

  • TA的每日心情
    慵懒
    2018-6-6 10:42
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    + L, K) p1 o1 p一.实验目的:
    : F( o% y  M( \8 N% g5 r1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;' X9 o3 Y3 H! Q0 G4 z. Z4 k$ ^9 ]
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.$ F6 z. k7 R" r
    二.实验内容:/ p1 p8 J) f; V
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).+ C7 @3 L+ l; B! r& `+ L
    为方便计,1km主管道钢管称为1单位钢管.0 J' i  s/ _- v. B0 H
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:  N" n; Q6 V: _! i. `6 @7 Q

    7 _1 d$ m( K5 W. o6 e$ {( w1        2        3        4        5        6        7
    2 N3 B; x9 C# s4 I2 ~+ L8 h
    * r+ D+ @% d! W) @! P800        800        1000        2000        2000        2000        3000
    8 ?# A2 d8 Y* i6 d- [9 B9 f 5 C. \. i; X% D
    160        155        155        160        155        150        160. c4 m) k3 S9 h9 D5 D( |/ ]4 O  Q

    4 F# L6 b, N1 s' L2 B/ o1单位钢管的铁路运价如下表:
    ( Q* ?4 I6 [/ y6 J' R里程(km)          300$ r3 G7 O. \8 f
    301-350        351-400        401-450        451-5007 Z- H6 V, x* j+ y8 b# c
    运价(万元)        20          23          26          29          324 a6 L$ p7 |2 U! a+ t0 c; v
    里程(km)        501-600        601-700        701-800        801-900        901-1000; `! X' m* V2 W/ i! q% k
    运价(万元)          37          44          50          55          60
    , l$ v0 n  N! G# u1000km以上每增加1至100km运价增加5万元.
    $ j0 P4 |! C6 k+ F公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).' M- g: r' F2 `
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
      J7 H( \* ]4 @' k5 d9 K/ X3 C 0 N) {) M5 f# Q! C5 ^3 F
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.0 b5 O% z2 E6 s3 w! P
    三. 模型建立% g' n' i7 N' p
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :5 ^  L$ c6 f) m; N# }
    ) v! f  ~( h( H* ?; v
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离  Y# @2 a* H5 ~2 ]2 _' A; Q
    ; a% [  q6 f6 o4 ^. ]% P" a2 F
    解:先写出带权邻接矩阵:
    * G! t/ ?5 p# _) f  w# [
    + J( J: ?7 p! u5 ^* ]6 D4 O后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    7 Q$ @! ~7 I$ B; A4 c) N四. 模型求解(含经调试后正确的源程序)7 ?/ S; B9 e% n2 N
    (1) Dijkstra算法
    # a" W" M% a9 D# e0 E/ W6 ^( Droad1.m文件源程序:
    3 n4 N$ ?' r( j6 J: J! \! p# rw=[0 1200 inf inf inf inf inf inf inf inf;& o7 o5 ~1 B+ u; z/ @( n& p
    1200 0 12 202 inf inf inf inf inf inf;  v; E  _" K/ ]
    inf 12 0 inf 201 inf inf inf inf inf;
    3 ^# e' x0 u1 t$ F1 f+ H5 u( p; hinf 202 inf 0 31 20 inf inf inf inf;
    ! d( M* D+ X( F+ `" l# q  W& I" Winf inf 201 31 0 10 inf 205 inf inf;$ s+ E; P! T' e  J
    inf inf inf 20 10 0 195 inf inf inf;* }* u! r7 N$ n( a3 f3 s) K
    inf inf inf inf inf 195 0 5 306 inf;
    ; z3 `* Q- q: M. |. ^2 g- Tinf inf inf inf 205 inf 5 0 inf 194;
    ; o5 y& Y+ q: ?# y* Iinf inf inf inf inf inf 306 inf 0 10;8 d8 v" U" Y6 W$ M
    inf inf inf inf inf inf inf 194 10 0]; 4 k$ N* ^/ C! r2 H* b& A1 p
    n=size(w,1);: o+ z; a$ Q9 ^2 K: y* b( W
    w1=w(1,;
    & f7 j( J$ F3 b" Q. sfor i=1:n% G% s1 [2 X# x! b3 K2 Q
        l(i)=w1(i);
    3 M4 g: F: J9 x- C    z(i)=1;
    * a; y: c  K) f1 s% tend
    % f! f3 d" u$ I5 y, H) E8 Ys=[];
    ; Q  S- G5 K2 h: v6 O% ~; `  Ws(1)=1;
    9 a0 k# |3 v  U! s% E/ z' {- L0 Fu=s(1);
    - E4 l) k$ }" ok=1;9 _) Q, ]2 S: {' \; T% w; P; X
    l;5 J! L/ J* x% s- ], X& \
    z;
    3 y  r* ?7 b1 V2 x( K2 A7 Z3 F# iwhile k<n3 O# [. z+ m3 b! h& z/ p
        for i=1:n
    3 c) O3 \1 `2 S) ]    for j=1:k
    ' J$ q3 ^9 ^* C3 X       if i~=s(j)" w. c& P# x% b, G4 F1 r  `: Q
              if l(i)>l(u)+w(u,i);+ g3 n2 B5 q/ B" Y
                 l(i)=l(u)+w(u,i);/ a9 y: [: J2 L/ x. ]" J9 _
                 z(i)=u;0 t9 H' z2 H: O* w* j: W
             end, p) [" }( k$ D1 f
         end8 D* `, [5 ~! i; K
    end5 U& T) k$ L2 ]
    end$ V/ S  C; r) }2 d
    l;
    : C# r  k/ N) _& T, d$ [9 z z;
    4 \: C; z3 `5 Xll=l;
    ) t5 J& \8 `, L7 a& u for i=1:n
    3 u& t2 U3 z4 F' z# c+ {0 T+ | for j=1:k
    ! t8 L4 E2 F7 g7 s3 s% F! Q    if i~=s(j)
      ?3 \. i4 b/ F# {0 K' h       ll(i)=ll(i);$ e) Q9 m! k% H2 l% Z
       else
    8 D8 a' a# F* ?( [" t( W       ll(i)=inf;
    - e6 {- ?% i. P2 N8 K. s. U# l7 e   end( W# Q8 [' z  S9 g# n+ D0 q
    end! u3 ^2 H" _% G( o7 G# }6 @& t
    end
    8 B% e5 p% s7 q& l' M; mlv=inf;
    * x3 U6 n9 t2 ]+ s( l( Ffor i=1:n
    2 W. C: [# V2 _9 l    if ll(i)<lv
    6 A. c: c: l' o. E2 G       lv=ll(i);
    5 i  _7 [1 }' q" ~       v=i;
    ( W! w  c: C9 H1 a   end
    + S" h6 _: b$ v4 Uend6 M- `/ Z; j8 a+ [/ h% D0 C
    lv;. U: z4 r: S: i% V5 y' t2 x
    v;1 d) Q8 l+ q( x0 j
    s(k+1)=v;2 N. ^6 l$ h9 r# O
    k=k+1;# ^( k- o1 L! a+ ]- U6 ^
    u=s(k);9 A/ F  z! e. U* r& ^1 b4 e
    end/ f/ q4 K  H+ J2 o* H. i
    l# H  I: z0 c+ x
    z1 m" t8 T: D0 R" \4 @7 h! V8 [+ _( g  t
    7 M0 a: w# s5 W4 @+ u" @
    (2) Floyd算法
    $ [8 {* A) h3 Lroad2.m文件源程序:# E" r" {1 b2 `% {4 y
    a=[0 1200 inf inf inf inf inf inf inf inf;
    8 J; {  W2 o' w9 h1200 0 12 202 inf inf inf inf inf inf;
    # Z) z  X! R9 z! P- Zinf 12 0 inf 201 inf inf inf inf inf;
    ' B1 _& A- u! _inf 202 inf 0 31 20 inf inf inf inf;. n+ P- w% j+ m( m
    inf inf 201 31 0 10 inf 205 inf inf;9 h, l( J2 o+ F9 d' Y, F6 ~6 x* Y+ A3 x2 L
    inf inf inf 20 10 0 195 inf inf inf;
    2 d. @. \% ~8 oinf inf inf inf inf 195 0 5 306 inf;* h9 i! ~& n" h" j
    inf inf inf inf 205 inf 5 0 inf 194;
    0 \: L/ M: F6 x: K- b/ \& ?" Yinf inf inf inf inf inf 306 inf 0 10;
    " I( r, \9 w! v" ainf inf inf inf inf inf inf 194 10 0];
    % c) z- I" c$ ]7 m/ V. F. W% ~9 A[D,R]=floyd(a)
    4 G3 l, s4 X- X, c+ a& |floyd.m文件源程序:3 _- U- ^, l' ?: E) m6 r) H
    function[D,R]=floyd(a)) B% T1 y1 x& x) @0 H
    n=size(a,1);0 n9 ^; f, I) e: u2 _
    D=a
    - `5 F  y, R0 E  g1 R; l8 Rfor i=1:n
      |9 u4 X; X' O8 D8 l, s    for j=1:n4 p3 @, `: [* N0 l9 L2 X
            R(i,j)=j;
    ) D8 A5 r* K: w2 o9 U    end
    " C7 r5 m# J( ~/ X( ^end
    , S0 R0 I+ [) r5 V# E0 ^R7 K; A9 k3 {" ^4 d! l2 B  Q
    for k=1:n
    3 I4 }8 A, x: R, H    for i=1:n
    0 l. m, c4 S1 ?/ B( T& V        for j=1:n
    6 u" G$ n: N- }+ z, P            if D(i,k)+D(k,j)<D(i,j)- `2 ]# H2 ^+ n: G4 {3 U
                   D(i,j)=D(i,k)+D(k,j);
    # S# e9 O4 w2 |. \# P               R(i,j)=R(i,k);
    & ]2 |2 a; q! c6 W. o0 M4 w3 ?4 }           end( S. p2 M; s6 q: I; d5 Q! r+ C9 z
           end' ^; k# ~4 s. x+ t  G3 h( I
       end
    # G, o, w7 R* r! \   k
    0 r  X& F* K2 C' g- |   D
    + P3 W: S% A, Z; u! I7 d% V   R2 t) \6 h, {2 ]0 o
    end) m9 s- H1 q8 H$ ^& a6 }* A5 r% {
    五.结果分析  m  o& R) J8 o2 w1 x# V6 Z
    (1)Dijkstra算法0 L  C1 P  y8 j; q( E
    运行结果:
    4 r- @& q5 `3 Z; t# w+ l1 {l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812" e* d. j2 X& Y
    z =1     1     2       2     3       4     6      5      10      8
    & E/ k0 z5 Z/ C
    " Y. q& c4 Y1 n$ M. d; I" U结果分析:
    4 r1 t  P) s: h; |& t通过运行结果: 到其他顶点的最短路的权 ,可看出,/ N; Z/ |0 v* y. {4 D6 a7 R6 m" R
    到 (即 到 )的最短距离为1812(km);) p: G; O( G" D6 |) d1 V3 y9 R
    到 (即 到 )的最短距离为1618(km);
    7 q' ^" k+ z, Z" L" G+ z  F" l9 Q  k* X' }( s
    到 的最短路径为:V1→V2→V3→V5→V8→V10;! L2 N/ G1 _+ f5 }
    到 的最短路径为:V1→V2→V3→V5→V8。
    1 }% y) G+ P- U( c6 a
    # b. g8 @5 |  k5 L/ ^0 d1 U(2) Floyd算法5 v2 C1 s6 N7 ~: j# ~( t% w( k4 X
    运行结果:
    $ w6 m" J- H6 v2 N9 w" h+ jD =
    % N+ G: v. j% I' ^+ O2 m4 ?     0  1200  1212  1402  1413  1422  1617  1618  1822  1812, Z; B; z; [+ P3 Q7 L3 P, i
      1200     0    12   202   213   222   417   418   622   6120 G) w2 W5 n' @1 M
      1212    12     0   214   201   211   406   406   610   600
    # q7 a! t  X; b  _# m- f. e7 l/ m  1402   202   214     0    30    20   215   220   424   414
    5 s) ?# `+ A4 X9 y- j  1413   213   201    30     0    10   205   205   409   399
    * T- ]+ J  \( R& ^  Y3 y, `  1422   222   211    20    10     0   195   200   404   394
    0 F4 s) r: f% w; E& X& ?  s  1617   417   406   215   205   195     0     5   209   1998 z# z5 I, O  r- X
      1618   418   406   220   205   200     5     0   204   194. z& k' T1 D. F0 c( u
      1822   622   610   424   409   404   209   204     0    10
    3 C2 t1 A- Q3 l  1812   612   600   414   399   394   199   194    10     03 b+ d; r& g% W- E3 ~/ @
    ; k' T( [- `# J) \) v) F, [0 `
    R =
    " Y( G) g* a1 E; N   1   2   2   2   2   2   2   2   2   2$ A4 D# {2 z  F3 y
       1   2   3   4   3   4   4   3   3   3
    ) F" J7 o* C2 {' D: y; A9 T# D+ Q   2   2   3   2   5   5   5   5   5   55 D& p: {5 n' |* p+ e# K1 [- j- N
       2   2   2   4   6   6   6   6   6   6& Z) _, E, |' b- y) u' b! X& |7 \: ~
       3   3   3   6   5   6   6   8   8   88 Q1 \# R* ^% C
       4   4   5   4   5   6   7   7   7   7
    7 c* o; J8 J& q6 A   6   6   6   6   6   6   7   8   8   87 o! A/ K2 U: k7 w0 P
       5   5   5   7   5   7   7   8  10  10
    ) u3 J' ~6 O6 d/ ]  A; r  10  10  10  10  10  10  10  10   9  10
    + d, Z5 n) \3 v* z   8   8   8   8   8   8   8   8   9  106 u, ]: }7 @' {9 c5 B' }# @( b
    结果分析:; Y( e; H. q! s+ @$ j2 m3 H
    通过运行结果:可看出,$ r$ s6 t9 {$ {( b
    到 (即 到 )的最短距离为1812(km);; l  ]! o5 ^' r, i! W
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    7 p* M; q( M; @( s6 b  t9 h 到 (即 到 )的最短距离为1618(km);5 }$ Z1 V5 A  Y; ?
    到 的最短路径为:V1→V2→V3→V5→V8。
    " A' h0 x6 t2 G0 n* G$ e  |9 f
      q' X4 x3 W! P$ T; ^1 I
    : w) r, u: o9 L+ p) z# N$ ]
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    1

    主题

    2

    听众

    8

    积分

    升级  3.16%

  • TA的每日心情
    郁闷
    2019-5-18 08:39
  • 签到天数: 1 天

    [LV.1]初来乍到

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-21 07:14 , Processed in 0.589372 second(s), 55 queries .

    回顶部