QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法, O5 W1 h- W8 i
    一.实验目的:3 E! g0 k+ e% A. h
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;. O* @5 _2 N9 l" _! @# B
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    5 p7 m+ L* A6 ]5 h- t: ^二.实验内容:: Z5 r  \& K( t1 V8 V
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    " ^  s7 ?$ s+ Z. Y4 |3 I为方便计,1km主管道钢管称为1单位钢管.  z( S9 L" q1 m; ^* H; A, c
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
      ~  P3 z: [, ?+ @
    : |8 r' O. q/ A6 l9 Z" h, y1        2        3        4        5        6        7
    , g( _6 ~5 Y! U/ s3 Y7 X' N: `
    + v! G, v; }: l+ @+ {" l6 m7 l% ~: m800        800        1000        2000        2000        2000        3000/ b! a' @7 d9 n6 X

    . i" f6 ]1 g% P- W( i160        155        155        160        155        150        160
    # |6 x4 k. u, S6 N
    3 u# G: Q' B7 T; M# ?1单位钢管的铁路运价如下表:
    1 n- d  m& t6 \7 `里程(km)          300) R0 n6 b/ ]! G# z2 u, T
    301-350        351-400        401-450        451-500) C  m* r$ w- o
    运价(万元)        20          23          26          29          32
    # R0 a& t+ _2 J0 L' K# O5 z里程(km)        501-600        601-700        701-800        801-900        901-1000% I" l! ^2 l$ e0 T! E$ m; P' F
    运价(万元)          37          44          50          55          60
    : M( I( Y. i: g2 |7 c1000km以上每增加1至100km运价增加5万元.+ Y# `! X( o, U' V3 i) R0 Z9 T
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    / r! E" n% I3 Z6 H9 S& I9 G假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.+ \" C5 e% Z+ s( x: n: @0 B, Y( _# g, }

    ( U3 @/ o4 l# G, t( Q( Z* y0 {试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.- C/ |) Z1 _' s
    三. 模型建立
    * j' ^1 |! b6 x设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :2 r4 ]/ n- E$ n# f

    7 P: Y, X0 F; x. O5 ^8 j利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离+ s7 a- t- F" r! F8 V) b

    % I# m/ p1 G" a- d) t解:先写出带权邻接矩阵:$ l* M. g4 F; {+ b7 M7 w7 ?
    . b2 s: p0 M7 x* V4 W
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    / [2 T+ W2 {7 L) w% m9 s  Q四. 模型求解(含经调试后正确的源程序)
    1 s% A' H- }3 o7 y, V(1) Dijkstra算法
    9 R- C$ x& P% I( Nroad1.m文件源程序:" k+ j6 F6 p* L3 h
    w=[0 1200 inf inf inf inf inf inf inf inf;) l; ~6 S+ a8 y4 F1 W# f& \6 |
    1200 0 12 202 inf inf inf inf inf inf;
    * W4 W2 {5 T7 c# V- einf 12 0 inf 201 inf inf inf inf inf;- |1 j2 W/ f1 M: E
    inf 202 inf 0 31 20 inf inf inf inf;$ O1 r- S# D8 W3 ^0 W
    inf inf 201 31 0 10 inf 205 inf inf;
    # E0 m( [7 {; u7 V5 x8 F; s7 winf inf inf 20 10 0 195 inf inf inf;, m( d$ H  ]. T0 z2 v. }: w; z
    inf inf inf inf inf 195 0 5 306 inf;1 ?2 X: t1 u& O- X& h
    inf inf inf inf 205 inf 5 0 inf 194;& S; P! U6 x6 k" ?8 F, A. b" c; `
    inf inf inf inf inf inf 306 inf 0 10;
    7 L* k6 q+ q: Q2 L( }4 iinf inf inf inf inf inf inf 194 10 0]; 7 v4 e$ o* d/ N! P' H
    n=size(w,1);
    3 \  M+ I3 y8 D$ F- g: k. nw1=w(1,;' w3 R' f9 K  G$ @9 G! ^7 t( e
    for i=1:n
    % v6 a% \0 |' @! V& A    l(i)=w1(i);
    5 ]4 |7 ], C6 ?' I* Q    z(i)=1;
    " u" W: L+ V) ^4 K# ]% T: bend
    ' n+ u6 J1 F# ?2 m+ }/ S; Fs=[];
    ! f- t, O" n6 l6 ms(1)=1;
    ) R8 u6 j/ Z9 h, ^; ?u=s(1);
    8 Q) j! B8 T; o& R4 h- hk=1;
    1 ]! `2 G5 G+ J+ K* il;
    1 B' W. N. X# a+ Yz;& P! {3 J0 s" X# d7 h$ D+ e& N) u/ [
    while k<n8 r6 a: P' v( F# |& x8 Q$ y
        for i=1:n
      M! Q& P) f( i3 ~$ p' H5 a; G: k    for j=1:k3 ?; C9 C* S- f  q3 b# ^$ P( ^
           if i~=s(j)9 c+ A: A7 `1 O! Z: Y
              if l(i)>l(u)+w(u,i);
    5 V$ E& Y+ @& i3 p! L' ]4 v0 m             l(i)=l(u)+w(u,i);! H8 y6 c- ~$ y0 C; K# g
                 z(i)=u;
    5 j8 G# P) E; q         end& @: ~3 l' H  P( \3 E% S+ z
         end% F9 ]& q; f2 p5 G7 y
    end2 A, N: o! e) c/ {, z
    end! s$ s# m7 E8 P. W8 c2 \
    l;  Z& J2 I9 [1 S( C
    z;
    ' \. J. S6 @# l2 G, K( _ll=l;
    - U3 y( l: L' W" \9 y6 M; ?% u9 z8 | for i=1:n
    % f/ r$ b) Q, s: t2 F; ^; z# T for j=1:k) W7 w0 m- b( X5 x( p% ]
        if i~=s(j)
    % x$ _- |3 |" o4 y" c8 {! A4 g       ll(i)=ll(i);; N4 }* q! V8 g5 N# R" M
       else
    : M$ H6 K4 x8 P0 @/ K, U+ p       ll(i)=inf;$ t/ _. o" q. D' l! B, _
       end
    # g' u' f6 e( S+ n9 U6 kend- s0 f2 v0 W4 D+ h) A( Z
    end2 s8 z1 A' r  o2 k* S
    lv=inf;
    2 S( F7 W( t) Q2 P! ^6 ufor i=1:n- U* v# l3 n3 U3 \
        if ll(i)<lv
    * B9 n  T6 n9 `7 R/ D       lv=ll(i);
    2 w5 V+ N  [1 f       v=i;, d, V- h; y- a0 D9 F& ?/ d
       end
    : L& N. _: T5 Gend% u: L0 B' _. m8 A% ?# ~5 V; T. o
    lv;
    ' M, k- }9 O1 C/ Z* v+ Lv;- p3 ^$ V3 U' }" J* I
    s(k+1)=v;9 u6 V. \: g1 x4 C0 E9 a
    k=k+1;
    * B! i1 |- b2 o4 c" x# q( v/ ?0 R2 qu=s(k);
    . j$ b6 [5 N, s5 Uend
    ( T1 i* P# B0 u% G5 F4 P8 ]  Zl
    : Q6 X! h. p; gz/ ~1 Y5 R% M& J2 E
    2 P; ~1 s: S8 q# _
    (2) Floyd算法
    - d+ d4 o" c' a/ Q- m9 I8 b- Z1 Nroad2.m文件源程序:
    & Z( K2 P8 P* c  z" I! ]. t3 aa=[0 1200 inf inf inf inf inf inf inf inf;+ `/ X) k& b1 O0 v' B5 O) ~
    1200 0 12 202 inf inf inf inf inf inf;0 S9 J( d! D' }+ \7 G2 f& `* p
    inf 12 0 inf 201 inf inf inf inf inf;
    + p& W; s7 z: B" D9 vinf 202 inf 0 31 20 inf inf inf inf;" h4 b9 {$ ?0 U" h. X( _4 L# ?
    inf inf 201 31 0 10 inf 205 inf inf;; ~" f8 E0 F4 D: L
    inf inf inf 20 10 0 195 inf inf inf;
    . ~& N* \  b9 Iinf inf inf inf inf 195 0 5 306 inf;
    ; h6 S1 X7 e  L2 winf inf inf inf 205 inf 5 0 inf 194;
    ( o6 r" Y  K- D9 minf inf inf inf inf inf 306 inf 0 10;! B; }7 z) X9 ?$ l! D) B  \* e. C
    inf inf inf inf inf inf inf 194 10 0];
    ; b  j& V9 f4 H) S[D,R]=floyd(a)
      q4 e5 F+ X1 B  q: s# a7 W# Z% Afloyd.m文件源程序:
      I( o+ s" u2 Cfunction[D,R]=floyd(a)7 K( m% j4 |8 W* M5 W; X1 c
    n=size(a,1);
    ' \6 c" p0 C3 w# |5 C8 ^$ J) mD=a
    - V. o: _0 l' w, Jfor i=1:n
    : M2 a/ y1 y1 x& K/ v    for j=1:n! N' U/ a" @. Q  K5 S
            R(i,j)=j;9 ^1 {5 O6 Y, i9 }4 G; e' `
        end/ A0 V' S: b4 |$ i& U
    end" w8 z3 u- R$ M5 [2 q( X
    R
    ' ~; ]& o3 I% D8 h% d+ C, u+ J/ m9 Dfor k=1:n
    7 l& V0 V# a. s6 L+ I# r+ o    for i=1:n  ]9 R/ \5 e" |: R& O3 S* T7 i. n
            for j=1:n  _- j0 {# v, U: k; D! D
                if D(i,k)+D(k,j)<D(i,j)& [- _8 V+ M: q2 B& F1 F
                   D(i,j)=D(i,k)+D(k,j);" n- x1 @( I& a+ n- s' X# N3 k
                   R(i,j)=R(i,k);, C0 U  B! ]0 t. u# S# V
               end
    ) u' o9 i: t: [9 Q       end7 t* Z) k) V0 Y7 F3 `' K9 {$ N
       end+ J2 e3 b. W& [# x' Y$ x" X
       k
    7 i: }: a( q( t5 Z3 D! c   D6 B; [2 z6 C# b( Z, V7 h
       R5 A+ D% j! B( Y# E2 m3 ^8 s( G
    end
    ' j1 Q. q# E* ~五.结果分析
    1 f" X; [5 z# ~( w(1)Dijkstra算法8 c/ d# @$ j/ V1 n1 ~5 h- h
    运行结果:$ k' r2 `( Y2 m8 k  V( e- I+ l( ?
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    ! S8 ^6 G# ?" `z =1     1     2       2     3       4     6      5      10      8
      E* o4 g4 S  L) R5 t
    3 k; Y+ r- i5 a) b结果分析:
    5 \; f' P( p% o/ d: S通过运行结果: 到其他顶点的最短路的权 ,可看出,8 H/ y3 J; |4 R: k5 D2 ?, a, I
    到 (即 到 )的最短距离为1812(km);
    7 r( @6 A  R5 B! {+ ], k 到 (即 到 )的最短距离为1618(km);$ x( k' Y4 Q' t7 }1 t

      v: l' L( ^  b! Z3 b 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    ! v" E, h) W, w 到 的最短路径为:V1→V2→V3→V5→V8。% v; _  a% S/ F& B7 j5 k: A6 ]

    # N, H) Q) N5 w* j$ J4 \# C(2) Floyd算法2 f( P/ g) J9 O
    运行结果:
    ( O7 i( _; ^) V' j& eD =
    , G9 d; O; P* e* o3 N8 z     0  1200  1212  1402  1413  1422  1617  1618  1822  1812! J, Y. P% w  p* w
      1200     0    12   202   213   222   417   418   622   612
    $ Z- Y6 U# L9 ^! H3 m" t( K  1212    12     0   214   201   211   406   406   610   600- R/ P2 T4 C6 Z$ [& f# r
      1402   202   214     0    30    20   215   220   424   414
    6 s* `4 }3 x* x% Z/ m& V  1413   213   201    30     0    10   205   205   409   3998 F3 }$ ~$ U; V
      1422   222   211    20    10     0   195   200   404   394+ \: Z* Q9 t0 l% w: N
      1617   417   406   215   205   195     0     5   209   199
    4 W: v, _8 W( x, E8 {  1618   418   406   220   205   200     5     0   204   194
    , H1 v3 M4 w& m) M  1822   622   610   424   409   404   209   204     0    10
    ' H4 y: j; N7 W/ d- |  1812   612   600   414   399   394   199   194    10     0' N. H2 I* `$ b* U" N! Q
    $ ?0 e; y8 G2 j) s  G" X
    R =0 `- B; \2 L: V) |% t
       1   2   2   2   2   2   2   2   2   2" i' T/ Z2 `9 L2 V' W
       1   2   3   4   3   4   4   3   3   31 y$ t8 e+ }4 N; {
       2   2   3   2   5   5   5   5   5   5
    9 x5 W3 u# K+ i- V# J   2   2   2   4   6   6   6   6   6   6( t2 ]$ Z* ^) \/ Z) ?+ t
       3   3   3   6   5   6   6   8   8   8& |4 ^. N; y9 F! B% {- G2 Z3 g0 U
       4   4   5   4   5   6   7   7   7   7" e% p3 @* D4 ~4 ]
       6   6   6   6   6   6   7   8   8   8; E5 G; @! x  |& r. v
       5   5   5   7   5   7   7   8  10  100 L' C. u% B; C6 q, Y
      10  10  10  10  10  10  10  10   9  103 Q- R# I7 H7 U1 j2 u# T. d/ J* P
       8   8   8   8   8   8   8   8   9  10; O/ P0 Q8 h. F
    结果分析:
    # C/ C' Z8 Q5 y) T( J通过运行结果:可看出,' L) G% d7 U& N/ \, G; A
    到 (即 到 )的最短距离为1812(km);: A% `4 n" x3 M9 X
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    $ P  ^2 P! U! }; R8 k 到 (即 到 )的最短距离为1618(km);, V( W4 f' s6 m
    到 的最短路径为:V1→V2→V3→V5→V8。) R) w; o+ ^# n3 C' M, V& Z
    ' W# L' j9 E. H4 \8 X0 b
    . r. i5 {0 c2 V) w4 @3 P. r) m
    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-9-13 18:30 , Processed in 0.356275 second(s), 60 queries .

    回顶部