QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    % y- w3 b0 t% \) t) w/ D0 T1 X) `一.实验目的:
    " O: _0 s9 V5 ~& O1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;/ Q2 N" }" V* h* m+ m
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    ' q* ^" K0 w9 v6 e7 q6 X二.实验内容:( i# _4 p+ k* n
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    8 c1 l! y1 V7 s为方便计,1km主管道钢管称为1单位钢管.4 X" [) K9 H6 Z6 L5 @
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:. q0 @. y$ s2 W
    ( D% C  `# M3 J9 N/ x
    1        2        3        4        5        6        7: S/ l' `1 W" M& W
    9 Y& d; V3 L* V2 I% C
    800        800        1000        2000        2000        2000        3000
    5 ]1 H. \  O. |$ l9 E/ T+ Z & N/ h' I2 e. A- V5 E. t7 A
    160        155        155        160        155        150        160$ k4 a1 C1 k: H$ c" m9 v( @$ H  ?" C

    ' S3 J% t" r" @7 U* m" j1单位钢管的铁路运价如下表:
    : u- D% u6 _% \3 B7 a里程(km)          300
    2 e3 B0 N+ j. t& c8 ~- h) `301-350        351-400        401-450        451-500* O3 ]7 S' b3 M& P+ O6 O
    运价(万元)        20          23          26          29          32
    - q6 R2 l' L6 K8 p* R! c3 A里程(km)        501-600        601-700        701-800        801-900        901-1000
    * h: d* G% y: ~+ N运价(万元)          37          44          50          55          60
    ' d# M+ ]; h& C7 u1000km以上每增加1至100km运价增加5万元.
    3 z7 C, W' o5 l  f% ^; |2 X公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).2 n3 G$ e+ a$ u  G0 F4 c' Z
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    ' x  E- o, [8 H, d1 u& h5 D$ m9 N . {. L  E: Q3 ?" y
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    4 _! Z, K5 \/ D9 l6 q. b三. 模型建立" s9 V+ a7 \: x( |
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    ( ]' W% C+ W' G. ]* _4 {
    $ j0 N" ^! [; F8 W$ v& K  ?利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离" E/ r- B7 R$ G2 b. A( q8 ~1 y
    % |! w' M5 U4 L  U
    解:先写出带权邻接矩阵:
    ) K0 [8 [4 {6 Z; z5 ?! b' H # t. m1 }( A8 P6 J) `, I# G7 ?
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    " S, F+ y# ~- S. E8 ?四. 模型求解(含经调试后正确的源程序)0 ]+ o6 ?% A7 [3 V, A  W
    (1) Dijkstra算法
    : n0 p$ G" y& l; L9 Aroad1.m文件源程序:  _1 |0 R; p; ?" m
    w=[0 1200 inf inf inf inf inf inf inf inf;
    - P) ^6 Y) ]& d1200 0 12 202 inf inf inf inf inf inf;
    ! ]% ?' R* ^; d0 ?inf 12 0 inf 201 inf inf inf inf inf;2 e6 {5 ], I. k/ U
    inf 202 inf 0 31 20 inf inf inf inf;
    & x8 D: l5 R4 i5 P$ \( Qinf inf 201 31 0 10 inf 205 inf inf;% s( j' @: i3 b) R0 u! S
    inf inf inf 20 10 0 195 inf inf inf;" t6 Y" a2 a  L+ f& x4 }+ G8 Q
    inf inf inf inf inf 195 0 5 306 inf;% I3 {* L0 L- I( [+ v, U
    inf inf inf inf 205 inf 5 0 inf 194;
    ) h2 c( d+ s# j# }0 ^  I0 pinf inf inf inf inf inf 306 inf 0 10;
    8 s- ~% G$ P( A4 @inf inf inf inf inf inf inf 194 10 0];
    3 J8 U/ c* i% n5 c  I0 Pn=size(w,1);
    , j8 b; C2 W) S0 g% y# Lw1=w(1,;
    * b* i5 W$ e) rfor i=1:n
    . e+ B' r% u$ [' S8 X    l(i)=w1(i);7 |+ \5 q8 ?$ h' X* X$ l
        z(i)=1;6 y% s& a& X1 N! s
    end
    3 h; W# Q) N1 {$ v: y& [  S$ _s=[];
    2 I1 r, q6 d- M) p" w# |& zs(1)=1;
    ( K6 M; N0 I% d2 bu=s(1);) ~6 Z  [& S6 |! Z0 i
    k=1;: K, I2 H# b6 L' O. ]
    l;7 w' @$ E, L' N
    z;+ e; B) u  [, B. R
    while k<n
    3 O! u2 B* l" Y  j5 a9 h9 W    for i=1:n
    " d- ]* V  \) C. i9 ^! R    for j=1:k
    ! N/ _4 `# l  m0 O/ c5 p) u       if i~=s(j)4 e8 z  O$ P0 `+ t
              if l(i)>l(u)+w(u,i);( Z5 {& N' T- ?& n: o# D
                 l(i)=l(u)+w(u,i);
    ( `6 @/ w! F' Q( R4 Z7 h/ s. \             z(i)=u;
    - n, F' [) I. R9 [/ ?& z: I         end
    7 ?; ]$ }" N5 l) p# G+ ~) Z     end
    " i0 R) I8 @/ N: f end/ t% d$ {5 M. e
    end
    3 e# o) L1 P5 G" b1 t  H4 ?1 q% j l;. M8 s3 m/ n1 L& T
    z;( `5 D, `1 i4 q" O8 A  J
    ll=l;+ V1 [7 \8 |/ V! {% z; r! j' J
    for i=1:n  G+ ]/ U- C7 ]! @/ q/ ]0 ^
    for j=1:k8 J% d, Z" s. N  }  M
        if i~=s(j)
    ! ~- P2 {. K: c- O9 X& s       ll(i)=ll(i);. q- E! q/ y: Q6 O
       else& C  w# D3 F- V4 _$ `. k
           ll(i)=inf;
    : R7 z2 z. U$ ?' N2 p/ W- I   end1 ^% K) `# M" X: p1 f" b: k; e4 d
    end4 u* Z$ r% G. r+ d6 ?/ v
    end5 @2 p8 r$ c2 g: s7 K* \4 W: {
    lv=inf;+ M2 s, C9 a+ E! P' J" w8 u
    for i=1:n3 F- m: g% x& m5 w$ e! L
        if ll(i)<lv
    " c! y2 q; C' N! @& I) a' Q# V       lv=ll(i);7 n1 r$ n/ t2 ^6 ~. T
           v=i;- a; u2 p) I. Z" j) u: J2 ~
       end
    4 H* C& L9 g" U; w2 |: O$ c0 oend9 x6 |/ Q+ B0 o9 l& I8 j+ @( k
    lv;
    % T/ a" E% a" p4 O1 Ov;
    3 ]2 f' W9 ]( n$ Vs(k+1)=v;- @' r) k) G5 z7 I: W1 A6 Z
    k=k+1;- t! ?& d8 u6 Z  Y- L) S
    u=s(k);
    " u$ e% K1 T" P3 G$ M+ qend
    , n* h! K- r" q/ {2 F" Ql
    9 v6 e9 B, S4 r6 _9 Bz
    4 r% @7 w9 @6 a3 I; Z/ O: B& E2 s
    (2) Floyd算法& O& X( v4 I- Q2 s, I' l
    road2.m文件源程序:
    8 x# }% r5 [4 ta=[0 1200 inf inf inf inf inf inf inf inf;
    7 \' H$ r! V* y; _6 M1200 0 12 202 inf inf inf inf inf inf;; A6 O( ?3 T! p
    inf 12 0 inf 201 inf inf inf inf inf;
      I" Z2 d* ?* Dinf 202 inf 0 31 20 inf inf inf inf;
    # j. u$ t: W7 `3 Pinf inf 201 31 0 10 inf 205 inf inf;
    6 K5 H3 D: f& X6 `inf inf inf 20 10 0 195 inf inf inf;
    ) |4 [0 }; @1 _5 a( c. K7 jinf inf inf inf inf 195 0 5 306 inf;: G$ b- b6 B' [0 b
    inf inf inf inf 205 inf 5 0 inf 194;- K6 |( I1 l( \3 m7 O  m) l9 {
    inf inf inf inf inf inf 306 inf 0 10;
    ( _3 ~/ {* g9 [0 ]1 z' n# rinf inf inf inf inf inf inf 194 10 0];7 |1 j# h6 \1 Q) ^" o' k
    [D,R]=floyd(a)& q' ]/ m( c3 V9 \( N- J7 e
    floyd.m文件源程序:
    ( d9 b7 _/ R( {' N+ ofunction[D,R]=floyd(a). h5 D& |1 F* x+ L0 G" l
    n=size(a,1);9 ~" }; v+ C$ `$ E# y
    D=a9 X. ^. h, V* T  i+ B
    for i=1:n3 C6 o% k* C$ i- X+ E( C
        for j=1:n/ f: r( W7 J8 f* A  c
            R(i,j)=j;
    4 O3 z' _7 [! n1 E% X    end! W( _, m# T7 e8 r1 j4 c' m
    end
    3 r) \8 p8 ?. {5 o2 Z6 SR
    , L% Q9 L: P3 Sfor k=1:n
    7 @# q% [# X, V8 r3 _    for i=1:n; Z. k4 ?' y; u4 z6 a
            for j=1:n
    7 g* Q+ l( h" k            if D(i,k)+D(k,j)<D(i,j)6 ]2 f% V, v) @( \
                   D(i,j)=D(i,k)+D(k,j);- j) B! t  Z) a8 c* d
                   R(i,j)=R(i,k);$ x; u* ~+ F+ \4 \9 g
               end% V: n8 E) Q$ J5 L
           end
    5 C$ I' _; o( `) h3 r9 e' ]   end
    + n; \2 ]- ^+ ], O9 l. L   k7 E& p7 `2 \8 P/ |/ y
       D7 V: W7 t+ x; h& T- Z
       R: n. n1 ?: h3 x5 I/ M
    end
    " i8 a. r" N$ P, p5 |$ H: R五.结果分析$ K8 ]( S* N7 L& @4 I. O4 j
    (1)Dijkstra算法% n8 S' c8 q  }/ x5 b( i
    运行结果:* K; ]4 Y) a2 x
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812+ Y+ n- C; k$ d5 ?. `- e# h; C
    z =1     1     2       2     3       4     6      5      10      8
    - t: Q" W% q& J3 z- c- {8 W 1 k4 @5 l) U: D9 `# E9 ~. R6 j
    结果分析:
    ! J: ^( \; K/ N" e7 W" `通过运行结果: 到其他顶点的最短路的权 ,可看出,! U+ x3 T- C& e  [3 T5 q1 x
    到 (即 到 )的最短距离为1812(km);
    0 i! U3 z: m, X4 x/ d  j  f. H 到 (即 到 )的最短距离为1618(km);0 f5 l; y7 f  @! Z) w

    # @- B; V7 z* `" F% E% t 到 的最短路径为:V1→V2→V3→V5→V8→V10;; i; c  K( [/ i& t
    到 的最短路径为:V1→V2→V3→V5→V8。
    1 f% M7 t) o; W2 A# z5 w1 R2 z9 {% z) X/ }5 _7 x- F( o
    (2) Floyd算法' l4 N8 r0 a4 O) K8 F
    运行结果:" }) c9 d, i' E
    D =1 B/ d, I' a: g6 @
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812- g, ]' p5 i2 R& T5 Y% r
      1200     0    12   202   213   222   417   418   622   612+ o. l, ?# {; M) A
      1212    12     0   214   201   211   406   406   610   600* q: v0 R4 N' b$ b0 b
      1402   202   214     0    30    20   215   220   424   414- O. }' @& K! ]9 v- |9 `
      1413   213   201    30     0    10   205   205   409   399, p' Y% C+ v. Y/ h& U
      1422   222   211    20    10     0   195   200   404   394
    & q- i0 s. n0 h. G  \$ ]  1617   417   406   215   205   195     0     5   209   199
    , w9 L, w: V7 n9 E: z7 G* W3 b  1618   418   406   220   205   200     5     0   204   1944 B% B) e& x/ N1 w4 P6 A
      1822   622   610   424   409   404   209   204     0    10: I! f4 s9 }6 L5 J: F
      1812   612   600   414   399   394   199   194    10     0% M# C' f1 S/ O9 [! s

    5 p, R6 Q" z" }. p* jR =8 G/ x8 S" o2 `, r) u
       1   2   2   2   2   2   2   2   2   2$ {3 Q2 l) z& p1 l9 M8 z0 x
       1   2   3   4   3   4   4   3   3   3
    5 \/ W* b$ b0 g/ Z7 l$ Z: G   2   2   3   2   5   5   5   5   5   56 p) R# v% ~8 Z9 a- |1 j8 U6 T# N
       2   2   2   4   6   6   6   6   6   6; H0 J+ E; b8 u+ r- X7 o1 b( @% I  H
       3   3   3   6   5   6   6   8   8   8/ v& k2 H" L* d8 D) d
       4   4   5   4   5   6   7   7   7   78 p7 A/ E3 R- ^
       6   6   6   6   6   6   7   8   8   81 A" i- s( \& R  U  @
       5   5   5   7   5   7   7   8  10  10* t% y' F; a# k& \
      10  10  10  10  10  10  10  10   9  10# F8 ~; |4 J( y! `; i
       8   8   8   8   8   8   8   8   9  10* L; f% t! [6 z9 [
    结果分析:
    ' k5 ?/ ^: M7 h" P# S0 z/ L通过运行结果:可看出,
    6 ^% [# l1 l+ w 到 (即 到 )的最短距离为1812(km);; {: i6 j% N6 ]+ q4 y1 u1 Q
    到 的最短路径为:V1→V2→V3→V5→V8→V10;' ~2 q0 k+ y  @9 I5 {/ U+ @
    到 (即 到 )的最短距离为1618(km);
    9 g8 `+ C. b# A7 `- q 到 的最短路径为:V1→V2→V3→V5→V8。, m1 U; `8 }* g' W; h& b* y
    , b- q' @  G# ]8 l1 p) K) p
    3 C7 b4 Z9 |1 Q+ z0 B$ b2 S6 E
    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, 2025-6-11 20:37 , Processed in 0.502290 second(s), 55 queries .

    回顶部