QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    4 ~* N7 g4 [- d1 s& z! s& w一.实验目的:9 T/ K8 M( }$ N1 P) L1 T- y, t
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;- W& E5 U0 t& h  q. M; T- K) r. m
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.: f3 X" H; `6 }8 `6 Q& {) P$ m
    二.实验内容:
    ) W% g+ `# i, r* o要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    , \# D( |" u; |( G6 t# u为方便计,1km主管道钢管称为1单位钢管.
    ! S0 T  I& j' z2 d8 {) g4 q+ c一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:& S/ z: K, A/ ]5 ]  J( R

    1 H& ?% D; e% `( E: Q1        2        3        4        5        6        7
    1 p# }; S+ n$ i! G 5 h! d  z. w- M' O, @
    800        800        1000        2000        2000        2000        30000 q2 Z" ?+ d8 V
    / a8 k, ?: S7 i
    160        155        155        160        155        150        160
    4 G7 n: X+ J5 z  v! k2 _" F8 D- y) w1 ]0 _4 @+ K% {! O- ?/ v
    1单位钢管的铁路运价如下表:( [  d' p% J, L& f2 O; B2 S' j6 u
    里程(km)          300
      x7 C* V7 ^2 W/ g3 z0 I) l301-350        351-400        401-450        451-500
    4 F- n: b: d/ a运价(万元)        20          23          26          29          329 L" M* X, [4 {8 G( `/ S9 ~
    里程(km)        501-600        601-700        701-800        801-900        901-1000
    # O+ F7 a( M: ^; Z0 x运价(万元)          37          44          50          55          60' l/ S+ F9 V; I3 `0 m
    1000km以上每增加1至100km运价增加5万元.
    + L/ H' x/ f- N1 X. w公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    ( {8 F) l! S9 e$ d+ @3 b' [. f假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.- t4 S& V* l7 O- B( ?
    ' p6 Q4 r9 d$ D1 ?% p
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    / h3 k/ w' V- i! K- x三. 模型建立) }) U, e) L+ w0 j
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    7 O: q5 y5 r% l/ Z; _  u; P
    ( K/ \3 j# o" q5 Q3 f利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离" h% s% c7 H# r

    , j# d" @& q0 u* W4 d0 D解:先写出带权邻接矩阵:
    % j. @0 t. o& \' G2 w! t5 Z/ i% ` 5 t/ a8 q, g! \9 V. V1 x5 D+ J
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    . r4 c& R  H) K2 L% t四. 模型求解(含经调试后正确的源程序)
    7 h! {$ u+ X) C3 t7 _" A- R: N3 s( Y# u(1) Dijkstra算法
    , @% L5 N" z3 x9 @* f7 ]  iroad1.m文件源程序:
    * m7 H' A- }3 C' H4 Lw=[0 1200 inf inf inf inf inf inf inf inf;, K% \$ g, R# n8 Y* V
    1200 0 12 202 inf inf inf inf inf inf;
    * v5 l( x" k' w7 Xinf 12 0 inf 201 inf inf inf inf inf;
    + H$ Y2 M8 B8 Y# c8 k% Ainf 202 inf 0 31 20 inf inf inf inf;( P6 t9 c; G: ^2 k
    inf inf 201 31 0 10 inf 205 inf inf;' X' c, P2 |. {' {* ~; A
    inf inf inf 20 10 0 195 inf inf inf;
    ; ]0 @* V- V! y" F1 p8 I4 _inf inf inf inf inf 195 0 5 306 inf;/ x. C# K1 F9 Q( g
    inf inf inf inf 205 inf 5 0 inf 194;
    - N- _3 O8 m- c3 R! Y7 O7 Oinf inf inf inf inf inf 306 inf 0 10;
      m5 `4 T6 ~9 _3 F4 sinf inf inf inf inf inf inf 194 10 0]; 6 W: o6 M2 `" D# H0 F
    n=size(w,1);+ \3 W# h, e' Z
    w1=w(1,;% ?; B: V; ^  O. x
    for i=1:n
    3 P" g' O( G2 a7 d    l(i)=w1(i);, c0 q3 {2 V$ X# }3 `1 o: g
        z(i)=1;
    % N0 Z) N; F* L/ j: J; w/ Yend
    . V) z  o: Y1 ]1 T# Q: Y0 L; r$ cs=[];
    # M3 \+ R" A  n( H6 Js(1)=1;& R. Z4 [# c+ u8 q+ U
    u=s(1);; ]- z5 E( A6 M( O9 m1 m6 m8 |* \
    k=1;
    9 s* {5 X" a: ]l;4 p2 x* o* m" c" N& j! F6 o! a
    z;1 T% W  ~* V8 m# r5 i- F
    while k<n6 ~0 o. y2 E+ h- j! d1 o
        for i=1:n
    , g+ F% n* ?* B: T: n  K+ f6 s9 L    for j=1:k0 Y5 {9 w$ P2 o2 ~3 q
           if i~=s(j)
    ' U9 T  Y1 F6 V; N( d          if l(i)>l(u)+w(u,i);( Y# G% P- L. d9 r+ F
                 l(i)=l(u)+w(u,i);
      p: S5 `0 X& Z4 }/ d             z(i)=u;# V! M5 _8 ~: {9 Q1 \. @$ l
             end8 Z9 |0 g; g) ^0 b1 ~! {1 ~
         end; `% @. T7 Z# o' P; U6 v1 g9 [
    end
    9 u: ]+ c$ T3 T# D' C) Eend
    - |9 |( D# R6 M, P4 w, v7 q7 T; H0 p l;
    4 y" ]1 {; k, F7 `6 P. B7 Y3 W z;
    9 p2 g3 y6 u( E  t! xll=l;% `9 r. j3 D. H" C# U
    for i=1:n
    $ f4 L6 H5 @& Z* v, b) ` for j=1:k9 x) L) f9 k& v! s( q  M8 |: W
        if i~=s(j)
    # C' O. t: T) ]       ll(i)=ll(i);
    / d1 [! b- u( g" T4 x, e   else  j" T% |( M0 ^* k& C3 f
           ll(i)=inf;
    9 U+ p: \9 z' i. A3 G. X0 L1 d   end
    & O; {$ Q# G8 ]; y2 ]end
    + R3 ?8 W/ z5 d: _9 w! r8 @end! f5 Z% S: ]8 b9 |1 J7 `6 s/ |
    lv=inf;
      `2 @3 F2 m$ d9 ffor i=1:n, p! f7 z5 C- I0 n6 B
        if ll(i)<lv
      [5 C6 L& ^9 P& a       lv=ll(i);  T* d+ n: P( Q7 [, K5 L
           v=i;
    4 l8 \  K7 f/ F% D  |& ?6 c( l( k! ]   end4 y$ t  J) _8 k, T) }. m
    end
    + A9 q2 w7 r; Xlv;2 j3 |. P0 R3 T1 L3 F) |: x
    v;1 X1 ?7 u4 P5 m
    s(k+1)=v;
    ; y! R% m% m! k( u' D! Bk=k+1;
    / ~. Y8 Y- J  ^2 ?* w. Xu=s(k);  |1 J7 I) ~. q8 k
    end; p, X, L; S  j* r" b6 k4 D
    l) e) l; {  X- x- W3 i
    z3 @* M( Z* i5 d8 N. x

    / s+ y5 M) R  S(2) Floyd算法
    # o" f) B0 q4 t: a" ?road2.m文件源程序:( J; c. r- x" A$ f" A
    a=[0 1200 inf inf inf inf inf inf inf inf;# M* {1 i( [5 X9 q
    1200 0 12 202 inf inf inf inf inf inf;
    - g8 I) w. r% G3 Hinf 12 0 inf 201 inf inf inf inf inf;
    $ {1 P" x# e. finf 202 inf 0 31 20 inf inf inf inf;! L+ n( R( [9 w- m3 [& A
    inf inf 201 31 0 10 inf 205 inf inf;
    - r7 T2 n6 q: jinf inf inf 20 10 0 195 inf inf inf;+ D+ }, i5 c1 S1 Q% ~  ^: V0 g9 f
    inf inf inf inf inf 195 0 5 306 inf;8 e* X! R: O) b* e" V& L7 o& q
    inf inf inf inf 205 inf 5 0 inf 194;
    / h$ d2 [5 q" ^6 ~6 w1 [9 Ginf inf inf inf inf inf 306 inf 0 10;
    ; ~  n8 l  D9 o& [inf inf inf inf inf inf inf 194 10 0];
    ! y+ V) l, t7 [/ ^. ], G, O4 {[D,R]=floyd(a)
    2 p, @  K3 l: j  m$ y7 t0 P; t1 hfloyd.m文件源程序:; Y2 E* k' C' K
    function[D,R]=floyd(a)' {6 I3 F/ C+ w5 i- K3 t0 G+ W8 I
    n=size(a,1);; ^$ n. c/ F$ i2 e; n' ^
    D=a% L, `5 r5 S* _0 U$ W* M
    for i=1:n
    $ z, f$ n. Z  y3 c    for j=1:n: H8 J/ D) q& Z3 U9 j2 Z( V
            R(i,j)=j;$ H. ?- N1 k. q6 x5 b. i+ a8 p
        end. K4 \" h7 Y' b9 n" {
    end
    4 K+ W/ A- X2 m8 rR
    + [9 u- u) N" F0 Z. n+ D3 P5 l6 Jfor k=1:n2 c) }$ k% w  T! C0 u+ x
        for i=1:n
    9 q3 H6 q4 {/ Q0 R: ?, w        for j=1:n
    9 t, U1 r/ E4 |1 _6 |  e: r            if D(i,k)+D(k,j)<D(i,j)
    * M  a6 N/ a: }. \6 |7 i               D(i,j)=D(i,k)+D(k,j);, U* [  c: R2 _- y; ~
                   R(i,j)=R(i,k);2 F4 c# S4 c% _) p6 m
               end" h; {. V) G4 z3 z3 F, i' k8 h
           end
    " @, y9 M6 ~9 T   end) V6 i/ Y: g# `0 L% N* h, b4 {
       k
    - u$ ~" A  \8 i! f   D9 Q5 o- M* V, u
       R6 w* X) @6 h$ G) g
    end
    ' H3 t$ I- |8 R五.结果分析
    4 ?4 ?' @' `8 ~: p4 A8 h4 a& u1 Q(1)Dijkstra算法
    8 o6 C3 \) Q( M7 b' N运行结果:9 y& q! N/ y% I- L3 t9 Q
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    ; M+ z4 Q7 @* c: T( R. A. m* tz =1     1     2       2     3       4     6      5      10      8+ a. O/ O; n1 `8 U5 S

    1 I( O2 A( P' ~  x5 X* S1 y结果分析:
    . W# S: O) v2 [+ |通过运行结果: 到其他顶点的最短路的权 ,可看出,
    9 X5 N; D$ `7 D) m 到 (即 到 )的最短距离为1812(km);) |+ @( `; A  P6 W, t: \* ~
    到 (即 到 )的最短距离为1618(km);& s0 @  ]( X/ o1 c3 b8 s8 V

    6 I1 M' c; a6 I! v: B. I; D; `, g 到 的最短路径为:V1→V2→V3→V5→V8→V10;' a' i; Y: w% |4 w) f/ [$ |4 ^
    到 的最短路径为:V1→V2→V3→V5→V8。
    6 _3 N( x) {1 T# G: [9 `6 u9 L) p: M% l+ H
    (2) Floyd算法2 B. q2 N$ @% x7 q9 }, a
    运行结果:7 V3 b$ [3 v; r; Y" @3 p; f
    D =
    2 ]+ E& d7 [  K& p. U     0  1200  1212  1402  1413  1422  1617  1618  1822  18121 |/ F6 l& `% @! y% T9 c: K$ |
      1200     0    12   202   213   222   417   418   622   6120 F+ A5 c/ w% i+ ^! B2 {& N; ~. E. X
      1212    12     0   214   201   211   406   406   610   600: {1 \9 W: B* Z9 L
      1402   202   214     0    30    20   215   220   424   414
      x& H- w2 V, m: s) J3 V  1413   213   201    30     0    10   205   205   409   399& X; Q+ ~0 O) q2 |& o' c
      1422   222   211    20    10     0   195   200   404   394+ @8 d/ N, Y  @6 ~( w0 p- D
      1617   417   406   215   205   195     0     5   209   199
    5 U( a3 o8 Z6 T& _8 _$ |# a. y  1618   418   406   220   205   200     5     0   204   194
    9 y* D$ n, ]3 D9 h. Y8 r  1822   622   610   424   409   404   209   204     0    10
    ' E8 i, a. H. o  1812   612   600   414   399   394   199   194    10     0
    - W4 `6 P; u9 H0 W* _1 o! j5 Y& \2 y9 x) k0 e5 {$ F
    R =9 \# e/ Z1 s' k9 f6 B/ y1 d* ^, t
       1   2   2   2   2   2   2   2   2   23 L* C4 e3 E. T/ f# b# {
       1   2   3   4   3   4   4   3   3   38 c7 x* ?, y/ {+ E( _+ d! B! W6 c
       2   2   3   2   5   5   5   5   5   5+ C9 i5 R1 T$ P% h* h" ^
       2   2   2   4   6   6   6   6   6   60 _6 P! }5 U5 A: a) Y
       3   3   3   6   5   6   6   8   8   8  g3 @0 l; h& q: M9 Z/ Y* Z3 Y" T
       4   4   5   4   5   6   7   7   7   7
    $ _3 o0 p- ^1 @/ c5 ?- P   6   6   6   6   6   6   7   8   8   8% h6 a1 b6 X; G
       5   5   5   7   5   7   7   8  10  103 V1 g2 W/ |) G+ O+ |8 N8 R
      10  10  10  10  10  10  10  10   9  10' _) Z, K# H0 G" x
       8   8   8   8   8   8   8   8   9  10
    + n* `( g/ ~1 ^8 M- J: y结果分析:3 _5 F8 {+ O. |/ g0 l5 G# l
    通过运行结果:可看出,
    & w  v8 o! P/ i 到 (即 到 )的最短距离为1812(km);
    " ~) ~; m( r1 A) J 到 的最短路径为:V1→V2→V3→V5→V8→V10;& P1 D: \& r; n% X2 I0 K8 Z
    到 (即 到 )的最短距离为1618(km);
    " T: I% K' J3 I0 B( m( f( C 到 的最短路径为:V1→V2→V3→V5→V8。3 a. L: E0 t+ E5 S# k0 a
    ! U) V2 ]. h% K7 c) L% e
    & g$ j" J2 O: O5 O
    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-30 12:09 , Processed in 0.429147 second(s), 54 queries .

    回顶部