QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法) u7 p5 H. N! U0 v
    一.实验目的:
    $ y* v5 C5 }5 w: ~1 j! F. X1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    . I7 D  u4 _$ ^9 Y$ L; X2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.8 j7 x2 P- c) k/ ]1 E+ {
    二.实验内容:7 q2 L8 N, [& ?0 t0 {7 E* h" a
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).: j/ ^/ E! v8 q* A* }
    为方便计,1km主管道钢管称为1单位钢管.
    & W( y8 |9 x% p5 ]* g一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:1 q+ q7 p# d$ ~& q7 b, S) f
    1 `" M' P4 i8 l7 a8 [  C, B
    1        2        3        4        5        6        7: i0 ?9 O% [9 O# K
    : E0 \  f  ]9 Q. W3 w3 _. G
    800        800        1000        2000        2000        2000        30004 `  b! A& u( L, k  ~2 i6 ], i
      ?" Q% U3 J3 R6 [) r
    160        155        155        160        155        150        160
    " m2 z3 s& n7 ?9 m. P4 ]
    3 i( q" @" Z" @1单位钢管的铁路运价如下表:
    + u: c$ ?, ]7 _/ `, Y0 M; N; R2 \. L/ a里程(km)          300
    % s; c+ R# J# o+ ?/ E( t5 L5 _301-350        351-400        401-450        451-500. }8 A+ I8 \; \
    运价(万元)        20          23          26          29          32
    : ]3 s7 k% Y* E- \0 T- w里程(km)        501-600        601-700        701-800        801-900        901-1000
    ) P. O% q) c/ Z6 E运价(万元)          37          44          50          55          60
    $ Y& t8 ~- N. I1000km以上每增加1至100km运价增加5万元.
    2 N. j0 B" k) F- C. g公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    3 F  A# Y( f+ Y* S  k& W% Y! S9 f假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    0 S2 M& V. y9 q8 b7 x8 m8 p
    - j0 k  z3 h/ [. h, f$ u试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.6 c6 I5 n- P; v+ k* t
    三. 模型建立, c# J$ n2 }2 B0 l: W
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    3 X, K# `; m* j0 h- ?( M 3 J7 C; F, X4 L  V2 M0 v) P
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离8 b& N! R8 a! r2 M
    3 K4 {$ u7 a% g. B# K' F
    解:先写出带权邻接矩阵:
    8 @+ t0 z+ S) S' j+ y $ k. G5 c$ k3 P! |
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .5 l. F' h; x. M# O& d; W
    四. 模型求解(含经调试后正确的源程序)
    * h; x. ?( z' M- d0 o. `' L(1) Dijkstra算法
    , V2 M; F* N, }/ _5 z( m' Xroad1.m文件源程序:
    , f% |, t8 j- Q- f' w' fw=[0 1200 inf inf inf inf inf inf inf inf;
    & Q/ z8 q& k; v+ N" d1200 0 12 202 inf inf inf inf inf inf;
    0 U5 P# n8 H% Yinf 12 0 inf 201 inf inf inf inf inf;
    1 p" A0 X$ I$ k4 j5 ]inf 202 inf 0 31 20 inf inf inf inf;. A- ?$ k" h1 L2 \: p8 C  ?
    inf inf 201 31 0 10 inf 205 inf inf;
    6 U* W( h# q# Zinf inf inf 20 10 0 195 inf inf inf;
    2 v1 X" `8 S2 w, jinf inf inf inf inf 195 0 5 306 inf;" j  a" C% O, |5 x9 Q0 n
    inf inf inf inf 205 inf 5 0 inf 194;
    # I; B5 J! C( S$ s  winf inf inf inf inf inf 306 inf 0 10;
    . h6 C" t3 \! u1 Sinf inf inf inf inf inf inf 194 10 0]; ' T' Q: d. ]$ y! u
    n=size(w,1);4 @# ?. Z3 W* c/ O5 i
    w1=w(1,;2 v! K) _! z2 p# Y$ X- o
    for i=1:n8 }, c6 n: @1 P- q' T) {8 f+ s
        l(i)=w1(i);/ R( W, l" y, O8 m9 M& Y
        z(i)=1;9 L6 {) w" c' b9 |
    end
    5 d" \1 X& o* i/ Q; x6 u2 cs=[];* g+ I. O- t: I
    s(1)=1;
    / F; n- C% m1 |u=s(1);
    , U( `/ U/ q5 C( }0 u3 mk=1;" _, q2 R8 J/ n
    l;
    # r- ?8 U* u9 [' w6 |1 M, X+ ?z;
    4 w  [/ X- f* A' @while k<n
    9 k- O% q/ r8 k    for i=1:n
    ! k& D& {0 l& e; E. ?* o+ S    for j=1:k; t" F- l1 \0 T) _. U  {+ p4 g+ f* S
           if i~=s(j)
    ; b. I4 |+ }/ m          if l(i)>l(u)+w(u,i);
    ) g  G( P0 @2 n8 ^+ U3 j             l(i)=l(u)+w(u,i);
    1 B: X3 |! Y! }% ]0 s0 k; y# l             z(i)=u;
    5 `/ d  d& \6 j& y& [         end
    ; @# h7 B& Z, `- F; U, ~0 Y     end! z! s& K; S1 i
    end
    : y$ I: Y6 Q  f9 Y# b- }3 mend
    / |- P/ ^" r) ]6 v- W! n& Q l;9 E8 Q+ H7 R8 f8 b( p  @/ i! Z
    z;* M& E0 l/ E& ^; q. Q" n* s
    ll=l;& B5 W1 P8 O7 o3 n* B
    for i=1:n) E3 n: \! n3 R0 D) J% `2 T
    for j=1:k
    9 q7 v# J4 S# x  O# j" ]& @) n    if i~=s(j)
    / F0 R- \. k; v5 ]. Y       ll(i)=ll(i);7 `$ O% y/ ~2 n: a" P
       else
    - p4 m! ]% x1 x3 |2 c' i2 _- c       ll(i)=inf;% Y5 s0 s# J5 A" f
       end
      B/ y) ^/ N6 F. N9 Bend$ A: m& S- I# B) X6 k, f! ]  t3 j! L
    end
    ( m( V! t" g4 |( k& S& u4 ]; \lv=inf;% S) \) F  h, _# Q$ e+ P! A
    for i=1:n
    & J% w/ V' o7 L+ |    if ll(i)<lv  V, Y2 o1 J1 h8 R$ G
           lv=ll(i);
    4 w& N! s1 I* k0 {       v=i;
    9 t9 n3 N! V" q; U, ?# [   end
    1 b7 k3 X8 b$ Y  g' Send
    # ]. `2 f. K" [% r- @2 Vlv;
    1 U, S# \/ \  x# z* z& av;
    . B: B, s. w$ ]# z$ K2 A3 _s(k+1)=v;
    3 n2 H% B( p( e7 A/ R* p& _0 Uk=k+1;
    ! T* e3 N, h+ I$ c& lu=s(k);# b' H: ~; E4 ]! E/ `  L4 H
    end) e$ O; R3 D8 e7 t: `/ _& u
    l+ d; X! o* D) U8 ?
    z
    ) |2 D* q6 b, `: q+ C& b9 v1 m) n8 I. t$ t1 G' ]2 s1 O
    (2) Floyd算法1 r1 `4 b9 _0 o" b5 Q; c
    road2.m文件源程序:
    : N; _4 ^: Y$ R/ U5 Y8 K" D2 Ya=[0 1200 inf inf inf inf inf inf inf inf;$ O) o) F% s% k* @
    1200 0 12 202 inf inf inf inf inf inf;. t. d" @- ]2 g, h$ B5 X2 P6 B) C
    inf 12 0 inf 201 inf inf inf inf inf;
    4 \, b* U6 k; winf 202 inf 0 31 20 inf inf inf inf;
    4 M9 R- h2 r8 {. W, D* Vinf inf 201 31 0 10 inf 205 inf inf;
      B- ~% f& F, K/ Ninf inf inf 20 10 0 195 inf inf inf;
    # \5 e2 O- g% p: R5 A: k; A7 [3 oinf inf inf inf inf 195 0 5 306 inf;
      v  ?! g# d% _* A# v6 c) x7 Rinf inf inf inf 205 inf 5 0 inf 194;
    6 u6 h/ l4 S% D2 Y: iinf inf inf inf inf inf 306 inf 0 10;
    - |( D+ b) Y! J( }# t' J* Xinf inf inf inf inf inf inf 194 10 0];; U1 q, L% R, Z" e
    [D,R]=floyd(a)+ R& c1 @; Q: p. _$ \% p
    floyd.m文件源程序:
    8 n! y% s& v7 Mfunction[D,R]=floyd(a)
      s7 D. T% b: C  u6 Fn=size(a,1);1 s! ?% c7 _- |8 g
    D=a
    ) q2 T  n. S* S* `  ofor i=1:n0 O7 }' J5 ?* j+ K" p
        for j=1:n
    4 U7 Q& X" ^. M7 L1 }        R(i,j)=j;5 U# V# ?4 j6 x) [' N  W
        end
    ( y; Y3 [0 O% M' w$ |6 Uend; n5 z8 \, M% m' Q2 b3 y; p: L/ v
    R
    . s" H1 B4 ?/ q! M2 ?4 Tfor k=1:n
    0 V( w% c( j! V  H7 Z3 Y& R7 B5 O6 \    for i=1:n/ i* t' R9 ~" k6 C
            for j=1:n
    , \# k. T+ o0 H  Q! N& {5 p3 o            if D(i,k)+D(k,j)<D(i,j)
    ( u7 N9 a9 b7 b4 f+ O1 ^) p               D(i,j)=D(i,k)+D(k,j);
    0 E& h* H8 M  h7 s3 A! v               R(i,j)=R(i,k);
    7 {5 H+ R# |' p! w, u# t2 Q           end
    * J% o# @. x. S" Z. f( F% _& j" A       end7 }+ u1 h6 F9 u3 h( ?4 |' L2 Q' Y; ?7 ^
       end- a* Y/ Z" N5 ~% r% |
       k
    * W, k* ?' g+ i7 T- v" X# i   D
    4 _4 P  S$ d& d! B5 }   R, u, B) t& _$ l% @; t
    end! {: U9 n3 m! a9 Y
    五.结果分析/ ^* K) J/ t$ S4 N# s" B  u" V
    (1)Dijkstra算法0 D" a" W1 V  x) @& Z2 t5 S
    运行结果:
    2 ~* I5 e& a7 M5 I% vl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    , p" p2 j& b8 i4 {- N+ Dz =1     1     2       2     3       4     6      5      10      8
    3 B1 q4 k! E6 U( V" `3 O 9 z/ q( C- d. J
    结果分析:
    + h; E& q$ |- v( L1 O! N通过运行结果: 到其他顶点的最短路的权 ,可看出,' [) H/ |5 @" K0 _; b. [. V/ @
    到 (即 到 )的最短距离为1812(km);9 c9 Y8 K- l" B5 N
    到 (即 到 )的最短距离为1618(km);0 P% h) y1 ~% r# f3 ~8 D/ t% `

    : g# ?$ R2 f; [! L* h8 L; J 到 的最短路径为:V1→V2→V3→V5→V8→V10;" {7 Y$ h! b8 W+ m6 v
    到 的最短路径为:V1→V2→V3→V5→V8。
    ) k* e" k' ?, m5 f4 F8 W3 S, T+ L& J+ j0 d4 D* V
    (2) Floyd算法% b- J$ \4 k+ r1 a" Q) L' d
    运行结果:; O$ L9 n; @4 R0 C1 x. t
    D =
      d) w) V6 f5 ?+ g: a     0  1200  1212  1402  1413  1422  1617  1618  1822  1812# m5 d  b' @. v/ T# O% J
      1200     0    12   202   213   222   417   418   622   612- P9 H. G) l  }. E( ]* b* b: v
      1212    12     0   214   201   211   406   406   610   600" C: T3 P" j) y5 ?+ u  z1 k
      1402   202   214     0    30    20   215   220   424   414
    5 A, `$ n# a1 C& u0 ?3 s$ c  x  1413   213   201    30     0    10   205   205   409   399& w& p7 J( r- }+ P& P
      1422   222   211    20    10     0   195   200   404   394
    0 H* G4 K" o! L  1617   417   406   215   205   195     0     5   209   199
    6 z+ R' G% Z9 m) X4 t7 P( |  1618   418   406   220   205   200     5     0   204   194! L/ `5 m! T# A+ s
      1822   622   610   424   409   404   209   204     0    10* e3 g' U2 w5 p3 l$ w- F7 Y- F7 [
      1812   612   600   414   399   394   199   194    10     0) G7 \1 B: Z9 q/ }0 y, e
    0 x% v1 \( L/ {+ Y6 A
    R =7 Y% [! q, [3 A4 v
       1   2   2   2   2   2   2   2   2   2
    7 R# c, y0 f/ A   1   2   3   4   3   4   4   3   3   3
    # Y0 w: w; [# j: w$ A1 C2 b- \   2   2   3   2   5   5   5   5   5   5' |3 J7 N, u0 _* G$ F1 J" i. G
       2   2   2   4   6   6   6   6   6   65 h! J0 c0 V! c: ~& W+ F+ y
       3   3   3   6   5   6   6   8   8   8- U% V# `0 m# c4 D; x- P+ t
       4   4   5   4   5   6   7   7   7   75 e' u4 r" i: S/ s9 `
       6   6   6   6   6   6   7   8   8   8
    5 {3 w+ Q9 Q8 n# c; J% H   5   5   5   7   5   7   7   8  10  10
    . D. q9 k0 @& `! K; z" o: i  10  10  10  10  10  10  10  10   9  10
    , p2 {' l; l7 p9 `! {2 D  R, X   8   8   8   8   8   8   8   8   9  10( E7 N. ]1 F# d" U) G9 l1 h
    结果分析:8 _; n- v2 {7 Z! y
    通过运行结果:可看出,
    2 k& N4 D1 A" O2 `" D: |" U 到 (即 到 )的最短距离为1812(km);
    2 f1 y# }5 x' A. S" \: Q 到 的最短路径为:V1→V2→V3→V5→V8→V10;1 d& H6 j' n1 c1 J4 y1 T5 @
    到 (即 到 )的最短距离为1618(km);' b* J1 a) Q2 x2 n
    到 的最短路径为:V1→V2→V3→V5→V8。
    0 `$ u1 R/ d5 M) s; v* t; o$ l
    6 H$ M+ }0 a1 c; o2 [/ m" \7 p6 Q# Y: ~6 f
    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-7-29 03:03 , Processed in 0.305315 second(s), 55 queries .

    回顶部