QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法9 B/ R( I+ ?8 G! N3 ]
    一.实验目的:
    - I2 y  L. i" ~9 N) ?1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    # l2 q) d4 a( [7 @  {, ]! ~2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    0 m8 u6 e; t7 h+ R) Z二.实验内容:+ U& y- |. e% E3 @- s; b7 U
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).9 W! K# m7 h  s: @' u
    为方便计,1km主管道钢管称为1单位钢管.
    4 e' u3 M6 I4 c' k0 f" J- s一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:1 }6 H8 C% G. H0 h2 J
    + Q7 E& {4 m% B, @9 F( s6 {
    1        2        3        4        5        6        77 F0 l+ D' ]. Y. D
    4 _  K: B- t8 o' Q
    800        800        1000        2000        2000        2000        3000
    $ s! Y" h$ l* D+ V
    3 ~0 ^; u- |/ o- K; a* [. s: i160        155        155        160        155        150        160
    ' C! @. D2 k1 _$ s) x' E: C7 s7 N8 k& F5 T' i
    1单位钢管的铁路运价如下表:) {) j" L4 L' `! |$ j$ `/ f! P$ _
    里程(km)          300
    ! ?8 t* l! e! f5 k& F301-350        351-400        401-450        451-500
    # b" l7 o% q9 v运价(万元)        20          23          26          29          32, |% m- c& J4 R* D! @+ F9 V/ N/ b/ b
    里程(km)        501-600        601-700        701-800        801-900        901-1000
    8 d& Y9 r. y3 U& ?0 B' d( |运价(万元)          37          44          50          55          60
    ( t( y1 y& i" h4 {8 X* O- e1000km以上每增加1至100km运价增加5万元.
    $ I+ T8 l3 y! ]4 P* H4 z  r公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).( R, {- X7 N( E8 ^
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元." x! n0 ]0 B+ [. t& _& }

    ! N& a; t  p2 q) [2 W. V试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.) W6 Q' x( l, v8 d
    三. 模型建立# h2 ~6 }$ U( C. M" \! m) t
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :" v$ T' \+ A$ b: m

    0 o: N/ s+ r1 O0 Z利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离; c& I+ ^4 K! ^! E/ J& m

    4 L  r4 e- l: k8 [解:先写出带权邻接矩阵:* p5 u# w2 y! m3 {3 P( ^
    % e- E# o0 {* @2 h- {1 C
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    / W- b; O* y6 B5 N9 G7 A1 g四. 模型求解(含经调试后正确的源程序)4 X4 m& p8 H7 e( D
    (1) Dijkstra算法
    ( y$ O$ n  C# ~/ d5 xroad1.m文件源程序:
    2 e1 t; W- u5 Jw=[0 1200 inf inf inf inf inf inf inf inf;
    , R2 W6 Y! X$ S( L1200 0 12 202 inf inf inf inf inf inf;% S. h& u' K+ x* {5 P$ ~4 U
    inf 12 0 inf 201 inf inf inf inf inf;
    1 P7 k+ N$ U: c6 A. Q* o: S3 qinf 202 inf 0 31 20 inf inf inf inf;
    8 s* K+ e0 @# iinf inf 201 31 0 10 inf 205 inf inf;
    1 R" H9 F- I% yinf inf inf 20 10 0 195 inf inf inf;* y/ j, N4 ~) s5 G0 M. f7 i8 K
    inf inf inf inf inf 195 0 5 306 inf;
    8 E& |" j! v1 c& ginf inf inf inf 205 inf 5 0 inf 194;. s6 ^% U! t1 g
    inf inf inf inf inf inf 306 inf 0 10;
    * ~5 U7 o( A: h2 ]7 H2 m) qinf inf inf inf inf inf inf 194 10 0];
    5 [/ L/ Y* C: R6 f, w& qn=size(w,1);" _1 {$ f; i! b" [$ U; N& q
    w1=w(1,;
    4 f" V& G% Z! M& U; a9 p1 H+ bfor i=1:n
    2 E5 o0 l. o8 G* p# b; _    l(i)=w1(i);% O: x# R; q; S  D( r
        z(i)=1;
    ) j) O$ v9 m! |end5 E! C% w! \4 x2 h9 j" ~* b
    s=[];* C! r4 f! B+ `2 |9 i! O$ ?
    s(1)=1;
    & z% d- |5 l1 P. ~2 Hu=s(1);! Q# s) {( g$ o
    k=1;
    6 \& m5 w) K& d" V; [l;8 B5 k. ?9 r. ~8 w% U4 C) L1 I
    z;
    , ~$ G- _; q. D: ^6 D/ [( O( zwhile k<n5 Z$ H# {0 d' M$ a" t7 f: I* i+ Q
        for i=1:n
    9 a/ s" x; T) c    for j=1:k/ e) c5 J- W/ Z- Y  X
           if i~=s(j)
    * b( q6 X/ Y7 c) H. l- B& O! |          if l(i)>l(u)+w(u,i);0 x' l0 s1 K& _0 l' A
                 l(i)=l(u)+w(u,i);
    ) d( F# D" U2 w1 r0 S4 X9 V7 Y             z(i)=u;
    6 ?3 T! ?' o2 z. Y         end
    0 B5 ~. `. N5 A     end& [4 v8 e2 C4 o7 m4 A
    end( h7 [+ R; _: L- @) Z
    end+ ~3 |, i9 {% n; u- f
    l;
    * h% w" h- n. F, Y- @6 j z;: K  t( z) e- X" [* @& z% d( A( F
    ll=l;
    % S- Y/ J6 T% ]6 j for i=1:n
    . j5 ?5 y; r* @% s8 b for j=1:k
    ' H5 o6 R. X- f9 c8 Q* ~    if i~=s(j)0 p' ~( {; W) k+ P; z# j
           ll(i)=ll(i);: J' h" t- G8 f1 t5 B+ G# T
       else5 r% t9 ~% ]8 g7 W7 [
           ll(i)=inf;/ _: b2 J9 D6 O& b
       end
    * k* G+ c! }7 ~" n  {end
    # p( N6 z) ^* f+ v% U6 Fend
    6 U0 G  M. W& p  ^: p/ u/ Zlv=inf;
    4 K# w  ]  P- Y/ K. P+ pfor i=1:n* F5 ~* V, s+ G; Q
        if ll(i)<lv7 D2 F8 j6 b' T3 j' ^; ?
           lv=ll(i);9 X, e* a4 V" N+ q" p: J
           v=i;
    + `$ A0 k, j1 d- ?: d% p   end9 T- ]5 `5 \' E5 [) e' D
    end; H, ~3 r9 h' y/ U
    lv;
    6 F$ u* P( K( b" W1 I4 |! jv;
    $ O, m0 Q7 M8 J' G6 S) q" ls(k+1)=v;
    8 Y6 o+ p; ]) W) f# q  M+ q* ^k=k+1;
    ( ^+ I: f6 D6 q' J% ju=s(k);
    % N* i& m0 q" F7 z: e: Aend
    6 q, t5 y% D$ L( n9 X' O4 bl
    7 F, [# d/ W  I" h. Y$ J3 bz
    8 S* P4 e2 D! u' W
    . {, q4 \0 Q# Q' `9 r7 B(2) Floyd算法6 N0 V$ _) X: P
    road2.m文件源程序:
    9 i- B5 T6 Z2 i: oa=[0 1200 inf inf inf inf inf inf inf inf;; J; E6 T3 b' ^2 e% M
    1200 0 12 202 inf inf inf inf inf inf;
    * {# S; A  D/ Hinf 12 0 inf 201 inf inf inf inf inf;
    * Q, p$ F+ B1 C& pinf 202 inf 0 31 20 inf inf inf inf;5 W, j7 S/ P  j8 H$ T% x& h1 g
    inf inf 201 31 0 10 inf 205 inf inf;* {- W- c+ G2 g$ N9 V
    inf inf inf 20 10 0 195 inf inf inf;1 \! M1 w6 r4 h6 O
    inf inf inf inf inf 195 0 5 306 inf;1 T4 `3 c5 R& h8 h9 I
    inf inf inf inf 205 inf 5 0 inf 194;
    9 o$ y% O4 r! a; y3 v( n' pinf inf inf inf inf inf 306 inf 0 10;
    % s& k8 q9 V# O$ \inf inf inf inf inf inf inf 194 10 0];
    ! x# n" [: q$ Z# x' o; n6 }[D,R]=floyd(a)
    , G' ?  h1 u* p6 a8 vfloyd.m文件源程序:/ i, {7 `2 J, a
    function[D,R]=floyd(a)6 B3 E$ `$ K# m) [
    n=size(a,1);
    " G1 @% ~0 t; H) R5 W1 H$ d7 fD=a: j+ I) C) |; v0 r* Q0 ^3 C
    for i=1:n
    " \2 k2 Y  `4 E# B) X% f    for j=1:n
    . b  A, \6 K8 u( E0 ]( H3 T        R(i,j)=j;
    " `& ?* c3 q% q5 ]! r    end; K* n# Z" P" w# a0 ~4 |6 g
    end
    0 P# Z# j, P# RR
    ( n9 Z( I* e/ B- Mfor k=1:n5 X! ^+ U5 g' m7 G
        for i=1:n1 a' E/ U" |4 ~/ m, W" P
            for j=1:n
    7 S; u6 w9 c0 \& C$ _            if D(i,k)+D(k,j)<D(i,j)# ?8 h7 u( y0 {1 Q" U) a
                   D(i,j)=D(i,k)+D(k,j);
    / O6 z7 M3 i3 g, |1 S# |3 v               R(i,j)=R(i,k);: U0 s. _" E; a$ i
               end
    7 Z/ W* a* o  m0 L  n% d, V       end
    . t8 R9 [9 F& I9 O   end, T7 K' j6 l8 @2 B. \1 C
       k
    ! @4 z3 [; _- g1 n+ ~& d% b   D% M1 G- _6 h% M* f( E1 _
       R
    ( S& y1 o7 Z! p6 @% Uend
    , J7 Z$ [3 H+ `5 h* R# t3 b) ]五.结果分析
    ' g  e" \9 A& b+ L3 u$ r* Z(1)Dijkstra算法+ Y5 X8 O- a- f' z; ^) S
    运行结果:
    ; M& ^& S$ [, @4 x. n, s+ Nl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812/ C. d0 o9 T* y  N9 p' I
    z =1     1     2       2     3       4     6      5      10      85 K9 m/ p5 U# i4 g
    0 f  m% b0 T  C1 P1 O2 g
    结果分析:
    7 z& u5 _' M& i( W通过运行结果: 到其他顶点的最短路的权 ,可看出,
    + H8 e+ q9 u2 t5 c/ N 到 (即 到 )的最短距离为1812(km);
    ( u/ r( E2 f% J) W: E4 x6 A, b; T 到 (即 到 )的最短距离为1618(km);
    % `, b' U  a. {! q
    6 n/ k' C4 Q) r( S( D 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    ! N4 A/ Z1 g" y1 x 到 的最短路径为:V1→V2→V3→V5→V8。
    7 q6 @% P- r. f( v& T) A- G. K9 i, \9 L$ s, [) |
    (2) Floyd算法
    " W4 f; M7 \0 P4 V运行结果:
    3 M$ T' x' D7 AD =9 z) b9 l2 k5 r- H) J: d9 R$ c
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    2 r. Y/ Z  }4 h/ @# d5 y( l0 m  1200     0    12   202   213   222   417   418   622   6120 f* w2 Y4 R9 s8 T! s
      1212    12     0   214   201   211   406   406   610   6005 g! H3 {9 R, v3 ~8 J* n6 @
      1402   202   214     0    30    20   215   220   424   414; e; M# K  V$ D# ^2 `5 ~
      1413   213   201    30     0    10   205   205   409   399
    5 |) k# U" W( R* l8 {/ V: V  1422   222   211    20    10     0   195   200   404   394% u5 T. Y( _' o
      1617   417   406   215   205   195     0     5   209   199
    0 R5 {  o/ A/ \6 _4 O9 ?4 P, @& N  1618   418   406   220   205   200     5     0   204   194
    " Z& V! ^9 }8 M0 P& C* y  1822   622   610   424   409   404   209   204     0    107 ?4 O% B' p0 Z9 O1 d. X! `
      1812   612   600   414   399   394   199   194    10     0  J% C, O- h: f* e% n8 p

    ; Y) c, K6 \" H, P/ AR =. p; I# d: D$ K/ `, @
       1   2   2   2   2   2   2   2   2   2
    ; t0 ?% {: M- j! B   1   2   3   4   3   4   4   3   3   3
    % J; h$ i0 |7 ^4 Z1 f  w/ ?* J( b( s   2   2   3   2   5   5   5   5   5   5% H2 @* u7 E8 U; |
       2   2   2   4   6   6   6   6   6   6% {2 t  B; {. Z8 D
       3   3   3   6   5   6   6   8   8   8* O1 t/ S+ E0 U* Y9 C
       4   4   5   4   5   6   7   7   7   7
    3 R. n4 ]$ V/ d  @. |6 g6 Z   6   6   6   6   6   6   7   8   8   8+ P4 C9 D. L# h. v* T! J9 G
       5   5   5   7   5   7   7   8  10  105 k/ s6 |+ o. ?, I. b+ e3 w
      10  10  10  10  10  10  10  10   9  10) {% O# L' X7 c4 I5 m) @
       8   8   8   8   8   8   8   8   9  10$ w4 i7 O$ ~% [7 u' u# X0 O' L( N8 b
    结果分析:* N# W, K! @1 _6 Q# v( B9 q. b) N
    通过运行结果:可看出,( |1 C. G: X4 @; F6 m! x( ~
    到 (即 到 )的最短距离为1812(km);
    4 M! y6 f. D1 ]$ L% G 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    / O. S& L1 e  z3 `9 x! P 到 (即 到 )的最短距离为1618(km);* ]! |, ?. f% O4 K3 Q
    到 的最短路径为:V1→V2→V3→V5→V8。
      Z0 B2 _0 y$ [' u2 [, L( ^8 Y, }$ r; _1 E( X. y5 f; C% m; P

    ; W# B: Y5 J$ 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, 2026-6-13 02:50 , Processed in 0.437247 second(s), 55 queries .

    回顶部