QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法9 V  K8 O$ u3 I/ Z8 C
    一.实验目的:4 U8 y0 R$ e8 \* @8 r
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;: y# q- L2 ]2 Y6 B8 q
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    , j8 e! i9 x: x( j! C, D二.实验内容:8 f9 A4 p" O" k! ]
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    4 b6 {/ K, L% r8 r8 {& @+ y为方便计,1km主管道钢管称为1单位钢管.: @/ b, x- M4 U7 c! U! }8 P
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
    6 V: B$ _7 @: v3 E
    . H$ Y4 u+ g9 m1 [1        2        3        4        5        6        7
    # m9 h' G: \: M7 g
    - z& {' H" |% Y# d, _, m0 u/ V2 Z800        800        1000        2000        2000        2000        3000) ?( M' C* q2 K( o7 P( I

    $ }9 @( C4 i, {* z  d160        155        155        160        155        150        160
    & [- v, Q) E5 z: f
    9 ^" t0 a* r3 g9 J  Z9 h* v2 s* ^1单位钢管的铁路运价如下表:. O0 [4 o  G& E  X) H
    里程(km)          300
    2 `/ p" X$ X7 k. e301-350        351-400        401-450        451-500
    / z$ s' f8 v) P" t2 D: ^运价(万元)        20          23          26          29          32
    * _5 s+ K$ @) P4 S9 H( W2 d9 A里程(km)        501-600        601-700        701-800        801-900        901-1000
    0 ]: `' m* Y: r6 A: z运价(万元)          37          44          50          55          607 S# T, |( H8 ?- R3 t
    1000km以上每增加1至100km运价增加5万元.
    , ^' v, c3 `: D! N2 v3 T* v公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    " w' Z9 f' x$ }) p* l假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    1 B) u( V, B& E: V ) e# m. j: h( i3 j
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    ; m; X) a# M( Y! t: A& y三. 模型建立, V' B2 _5 b" ^4 }9 E) n7 [
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    % g( A( j6 D9 H$ Y4 V+ C6 O1 ^
    / Z2 c" M, d3 D+ @+ A/ ]2 `/ n' q利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    ' T5 \: B' i" b3 F , o# _) M' W$ o! x
    解:先写出带权邻接矩阵:
    % T3 M# y  [' e" ?# S, L, x
    ! B- f9 b" Z% O! F4 r8 t后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .8 _4 Y+ P+ y  W7 J$ K% A! M
    四. 模型求解(含经调试后正确的源程序)
    , x$ K  ]# b' x7 e" v+ q(1) Dijkstra算法
    ( O3 [. s1 D% {8 }road1.m文件源程序:
    8 F* ?7 z7 T  r; K1 ^9 l# Zw=[0 1200 inf inf inf inf inf inf inf inf;# C& }3 g1 W; Y& h3 v- O6 P0 \6 k5 k
    1200 0 12 202 inf inf inf inf inf inf;
    1 B1 N8 M' H& C  R- Winf 12 0 inf 201 inf inf inf inf inf;5 c+ P" _9 @+ l( R- w
    inf 202 inf 0 31 20 inf inf inf inf;" S5 B' v- k/ b0 D# d
    inf inf 201 31 0 10 inf 205 inf inf;. X7 z0 S; F" D, O7 h: p  @
    inf inf inf 20 10 0 195 inf inf inf;
    4 E  o8 H# Z- sinf inf inf inf inf 195 0 5 306 inf;( S  \% u' M2 J" s0 Y. ]) ^
    inf inf inf inf 205 inf 5 0 inf 194;* w- `. _7 ^/ B! U, N/ V# U
    inf inf inf inf inf inf 306 inf 0 10;9 L0 v' u- U# [( {4 E
    inf inf inf inf inf inf inf 194 10 0];
    . K1 G* |( `) C7 b7 p; On=size(w,1);* o0 w4 Q* W% j2 O
    w1=w(1,;
    ; ?% G( y# i/ \) yfor i=1:n
    # T; \5 y8 A1 R  b  u    l(i)=w1(i);
    ! R1 d& R7 U9 U1 ]  o    z(i)=1;- ^3 r& a6 K4 l( l& y+ N- L
    end
    ' o: M: v+ H4 x0 M, d! ps=[];: r) Z. E7 f3 [9 J" R$ W7 r
    s(1)=1;0 D  s# R  b4 l3 X+ @
    u=s(1);4 t: S! a# V7 T0 `8 ~
    k=1;
    : E' M* X+ |1 Q+ H# A; fl;( y- Z$ }1 A, n2 Y
    z;4 `' I+ y! l- `2 g7 v* e
    while k<n
    9 i6 ~/ X  C7 @* ?0 y  e2 v    for i=1:n
    , V; T+ H5 @8 M: s4 t4 k3 D2 U9 V    for j=1:k
    * m# X' h7 H5 F- f& g       if i~=s(j)& ^# N0 G+ R8 L; C0 ~8 f# {
              if l(i)>l(u)+w(u,i);
      S. n8 q- P' m1 |9 T) S+ ?9 T( t* D             l(i)=l(u)+w(u,i);
    7 V2 x0 h' x3 Y  J8 M8 ^) L             z(i)=u;
    5 c- |- T# e7 N3 t         end; I! j$ a% T0 u9 l% Y
         end
    . T: [1 u9 c. r, `  o end
    3 Q$ f0 I5 O' i+ z( cend0 j; P& F' V! u1 |5 \3 X; w
    l;
    . ~" \4 Y% P' H9 d8 {2 Y+ q5 t. b z;
    6 {3 w9 s4 M: z  I! Rll=l;, B% `- }/ G0 m# k. u' Z
    for i=1:n
    7 [& p/ ?4 m: m! `" T for j=1:k
    1 C' }1 m9 e, J) B2 z* X    if i~=s(j)
    $ V  k3 g: j5 G; ?, e7 m" W9 m3 t       ll(i)=ll(i);
    + U" W5 T6 b" b- t6 Y   else# ]: Y  g: r7 l
           ll(i)=inf;
    ' R3 C% |1 L# _7 A0 d   end
    , e" f) p' p* L- a  ]) g0 d* cend
    3 R' c6 \1 z9 L& d' Z  W( Q: pend' e, R7 C( X, A, p6 J
    lv=inf;0 S" v& d$ l' W7 H+ x8 a  X
    for i=1:n3 R' [# W& g; y* O/ ^2 f0 ?
        if ll(i)<lv. A+ e6 I7 c3 y: T8 T
           lv=ll(i);
    ; d+ |/ q( C* k0 u" t       v=i;% T3 a* i5 o$ |% {& m% s2 c
       end
      S; q( I: A, H: _" S7 A, cend
    * E  U& G2 m( H$ _. p) I$ z5 Hlv;: M) Z' v6 {  `) M( H2 }. x- Z
    v;
    ; i( U; }- S1 h( ws(k+1)=v;
    9 x2 L" S" m& T0 c7 jk=k+1;! \+ `" ^7 u7 W/ {- ~2 g1 t& c% ?/ f
    u=s(k);* d+ K- N3 t8 r( h0 `) {
    end
    : g- l  i2 T1 H. bl
    9 v" I, V6 e3 C2 h; c) p/ ?z" d7 `" {* t, W9 d% L7 V
    2 K6 l0 M- O$ a- R7 y/ ?9 i4 G
    (2) Floyd算法8 W1 ?7 z, U# q% X+ o) q
    road2.m文件源程序:
    + N% X. y) B/ Da=[0 1200 inf inf inf inf inf inf inf inf;
    2 F' n1 s# w; y$ `( n) Q3 v1200 0 12 202 inf inf inf inf inf inf;- s8 \6 ~1 v1 U/ y" d' K
    inf 12 0 inf 201 inf inf inf inf inf;
    3 ~, X7 a' ~1 y' X6 l) {2 @7 Jinf 202 inf 0 31 20 inf inf inf inf;6 }. p3 M9 E+ S& d" X
    inf inf 201 31 0 10 inf 205 inf inf;
    ) U- X* k! ?0 ?* `3 \5 k' ^/ xinf inf inf 20 10 0 195 inf inf inf;
    9 f) [- ^8 l* ~: i' \  _. `& [inf inf inf inf inf 195 0 5 306 inf;
    # q+ \+ q7 ^5 g3 S' tinf inf inf inf 205 inf 5 0 inf 194;( r0 b- g7 a9 y  `
    inf inf inf inf inf inf 306 inf 0 10;% K6 r4 }8 k4 b
    inf inf inf inf inf inf inf 194 10 0];
    * {8 o0 H* C- V7 l$ _! I& b[D,R]=floyd(a)
    2 V- x- ^. {- Y: b+ r( O  zfloyd.m文件源程序:
    , i+ q, I# W. k6 i5 y# M- V) Hfunction[D,R]=floyd(a)
    ; d; W$ Q( c, P8 u' q, l: `, vn=size(a,1);
    + Q$ s  m1 j6 P, ~8 l& R( y+ t5 X; pD=a
    - z, |1 o! B3 I3 c( X% kfor i=1:n+ b, ^6 Z& {' X( \% A  C, a
        for j=1:n7 i# E! U+ L# r7 V
            R(i,j)=j;& O* ~" Q2 P2 N9 l
        end
    8 S- b+ m) Z7 W# H% F+ aend+ u0 I* }1 C3 }6 n  a
    R
    $ h8 I( n1 I3 M& R; @for k=1:n
    * z6 \! K! `/ o: u; z* z; n    for i=1:n6 _* M: }1 @9 A2 }7 x( G+ a. a9 F- |+ G
            for j=1:n5 p0 T' [' B% M0 f
                if D(i,k)+D(k,j)<D(i,j)7 J7 }1 G6 b0 f
                   D(i,j)=D(i,k)+D(k,j);5 o5 M9 X: M1 u% E. g1 {! g5 }; z
                   R(i,j)=R(i,k);
    4 A, I. K$ \; l' J6 H& x0 r           end0 j% q. Q( K2 z9 ~5 f  |
           end2 C9 x% _2 R9 d5 _! @; b3 o
       end
      ^, I' i8 Y5 u8 J" C. O. x   k
    : ?4 [9 H4 R& \, o6 c2 u   D
    ! F. v( M5 z) W& G; G1 Z, l$ l  ~  F   R
    ! I- I6 q  A5 L$ P; hend
    " c1 T+ `% f: W1 }五.结果分析
    ' n  _' m" x8 `3 @) H(1)Dijkstra算法! ^' d5 [% O+ N, Y5 n: H+ p6 G# [
    运行结果:
    1 F7 `+ J3 M8 `0 H) ]; t1 V/ A# Kl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    2 i, U5 C7 k+ |. U: S2 pz =1     1     2       2     3       4     6      5      10      8
    + e6 e7 ~1 v9 g4 @* C 9 o/ p) c" K6 P, X
    结果分析:) \+ ?" ]8 M+ X) N& J2 i0 I! q- R
    通过运行结果: 到其他顶点的最短路的权 ,可看出,. r( X  m7 o1 g2 h7 n+ c
    到 (即 到 )的最短距离为1812(km);
    , m6 U+ Y* H' G+ C: M 到 (即 到 )的最短距离为1618(km);3 F" @& q( ~' i3 A# m
    0 A5 ^4 }* @( Z& F( }$ U% p& b
    到 的最短路径为:V1→V2→V3→V5→V8→V10;# ]" \4 w8 M, a9 E9 d4 q" [' D
    到 的最短路径为:V1→V2→V3→V5→V8。& j+ J7 l4 I2 a5 a
    2 {  z/ b- O5 y6 |/ m0 L" N7 _
    (2) Floyd算法; ~! \% z$ f: ^, l
    运行结果:
      v% F( g  t; i8 w2 PD =7 [& D4 X+ M9 j
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812# E  F; c9 e5 a& i: O
      1200     0    12   202   213   222   417   418   622   612
    " |! l; |! U# y. A3 f& H# R  1212    12     0   214   201   211   406   406   610   600
    ( |; N2 T8 [1 I' }  1402   202   214     0    30    20   215   220   424   4149 d1 h# j! o: U( b! u
      1413   213   201    30     0    10   205   205   409   399
    , q. u9 z3 G8 U5 _  1422   222   211    20    10     0   195   200   404   3948 a+ M0 H  @; C% a) I" Q0 d: K
      1617   417   406   215   205   195     0     5   209   199
    * U8 v1 f, x  h  1618   418   406   220   205   200     5     0   204   194
      u% L) r) T/ r. a3 s- K  1822   622   610   424   409   404   209   204     0    10
    ; {# }- B% |2 s' F  1812   612   600   414   399   394   199   194    10     0
    " C# D) O* ^7 m1 }0 u( C
    . Z& Q! a! o) ~7 WR =
    2 K, ]2 a4 M) V& i8 H   1   2   2   2   2   2   2   2   2   2& p' G6 Q& b- W. ?- m  o( I( U
       1   2   3   4   3   4   4   3   3   3
    + c6 U: T* e/ f7 u   2   2   3   2   5   5   5   5   5   5
    / ~7 Z( a0 w  z. V) x   2   2   2   4   6   6   6   6   6   6
    8 `# E* H& J; Z. X9 \   3   3   3   6   5   6   6   8   8   8( R2 T# n# x  A. W5 i
       4   4   5   4   5   6   7   7   7   7
    4 |; V+ Q/ G5 `% D5 M' j" @/ u   6   6   6   6   6   6   7   8   8   8
    6 J% |( Z8 M- s$ ~, e1 v, \   5   5   5   7   5   7   7   8  10  10
    ( C; g3 Q$ s# r7 o# n6 ~! q  10  10  10  10  10  10  10  10   9  10- \3 U# Q5 [& o( u+ Q* n6 M$ C' N
       8   8   8   8   8   8   8   8   9  10) i* w7 K- ~# H) n
    结果分析:
    4 v7 O/ R& s+ U* _通过运行结果:可看出,7 u6 ~- |8 d: w( T: D9 [. C
    到 (即 到 )的最短距离为1812(km);
      _: ]& c. q: h0 b% ? 到 的最短路径为:V1→V2→V3→V5→V8→V10;6 v- R6 l$ `( h& J/ }1 \; H0 y9 k
    到 (即 到 )的最短距离为1618(km);
    2 ^" B/ t4 V( v% v 到 的最短路径为:V1→V2→V3→V5→V8。
    % v$ _" V; f/ o/ T3 A2 K8 |0 n' z% L) [$ V) F- ^/ z

    . d6 N( {& F* V5 {
    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-12 06:51 , Processed in 0.410593 second(s), 55 queries .

    回顶部