QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法5 ?% i  u1 x2 a: l, B  E6 S
    一.实验目的:
      ?3 u7 \  a1 m- {" S1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    . ?( U# F9 `1 B% l  n) y2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    & w) ~9 f+ ~/ n) K3 e* R( w, Z二.实验内容:
    0 S7 @# P8 T8 j/ {% y& n7 a要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    7 p* ?% p' C3 H8 Y1 Q3 X9 ]为方便计,1km主管道钢管称为1单位钢管.* x) |- O2 I) h1 `# M& K
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
    $ W. n4 e& G6 r+ s& j+ n
    & M) Y# N: n( P/ M& H. l1 P2 o1        2        3        4        5        6        7
    9 `' H+ x: H2 V4 @& A
    ; P) e6 G4 i* W7 f7 e. D/ a800        800        1000        2000        2000        2000        3000
    . [, n4 N9 {1 C1 X$ L
    # Y# S4 R6 j0 B( W7 w% a% L160        155        155        160        155        150        1609 [: F3 A$ z/ j+ D5 [

    * Z! |+ s3 S+ Y6 p5 b, m1单位钢管的铁路运价如下表:7 V8 t# J9 ]1 W: o% T
    里程(km)          300
    & a7 E% b9 T7 h8 I3 T301-350        351-400        401-450        451-5001 x: d: L) s; D# {6 t
    运价(万元)        20          23          26          29          32
    * W! }! ]1 y- M9 j: h$ n里程(km)        501-600        601-700        701-800        801-900        901-10004 |8 `& l# g( j  T, H) m4 W
    运价(万元)          37          44          50          55          60
    ; L1 h4 T: D- r. y1000km以上每增加1至100km运价增加5万元., Z! A' y& v6 \% a6 U  h5 d- ^
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    * A. Z- ?) X) h% E9 s* U$ g$ a假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    9 ]8 F4 J+ F) d" f8 G; O
    % Y# g4 o0 P% q5 t9 A/ Y: A2 |试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    " I$ R9 D* w9 S" m$ E3 J三. 模型建立1 C% d1 y# A# z* S& b
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    + W" u& Y* K  t  X3 o! w* J
    : J  O) x8 X/ i4 k( c( s  V8 `利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    0 F# Q3 u# ]( X. q  J ( p0 _2 Y& p. M# z- h5 t* ~" p+ ~6 b8 r
    解:先写出带权邻接矩阵:9 d7 L% v- e) R0 E. m9 ^

    ' x3 V, j* H. C+ d后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    , b  y! m0 [$ `0 a( t% T  y& Y四. 模型求解(含经调试后正确的源程序)% ]+ @, C, X* ]; S
    (1) Dijkstra算法* }9 w" o. @* v# s% D1 }9 _
    road1.m文件源程序:
    % e& E5 z& [$ yw=[0 1200 inf inf inf inf inf inf inf inf;8 [; K% W5 N4 w* Q0 L
    1200 0 12 202 inf inf inf inf inf inf;; D6 i& X( c3 W3 Z" b8 z# y
    inf 12 0 inf 201 inf inf inf inf inf;
    + z/ F$ Q$ C/ y! [$ a& ^" _inf 202 inf 0 31 20 inf inf inf inf;
    ; Z3 m& P4 g& N2 g: k! Z8 z! q- Yinf inf 201 31 0 10 inf 205 inf inf;1 T8 e5 j* y/ O' z: W
    inf inf inf 20 10 0 195 inf inf inf;
      O7 j/ o. e7 x8 I5 }* |* p, Uinf inf inf inf inf 195 0 5 306 inf;
    3 P: {0 n+ B- K" _4 D4 C" iinf inf inf inf 205 inf 5 0 inf 194;
    7 ]- d$ u4 v0 H% h2 rinf inf inf inf inf inf 306 inf 0 10;
    % p2 X6 b! G) S; Ninf inf inf inf inf inf inf 194 10 0]; 9 k! x6 N; q6 S6 h4 ~5 Y
    n=size(w,1);
    4 t3 [  q3 b# _6 ~. Jw1=w(1,;
    * P, T' R0 A8 s* F, Cfor i=1:n. i( E1 G" r/ a
        l(i)=w1(i);
    ) V- h; @  H# H7 c! ?6 G    z(i)=1;/ R9 B" k* j+ H6 v# S
    end
    ( l- |  C% a2 g# b  ]" xs=[];# N" @& P+ N4 H6 u! J$ y
    s(1)=1;
    1 G% E: d1 D2 q3 ?4 o& @1 y# S7 Pu=s(1);. V2 ^7 ]/ G  i' O$ S* [
    k=1;
    " b+ N7 h8 S! b" cl;
    % n" _5 d1 P$ _7 Kz;, ^; e& C  B' a# F+ g+ b
    while k<n1 M  X6 p& r$ p3 L3 _  |! Z
        for i=1:n+ b! h' r3 I0 c: F! f" e  X/ G
        for j=1:k
    ) N4 L4 i5 m7 `. h  A       if i~=s(j)- u8 l$ N% ^  A6 V; d7 k! g
              if l(i)>l(u)+w(u,i);
    ' l7 O+ m; Q4 }* ^             l(i)=l(u)+w(u,i);
    " n* q2 v3 c0 Q# B1 k             z(i)=u;
    0 o7 Y. u( t; L* n; l# J         end
    ! y7 |9 t; v" j; n: Z3 d     end
    & ?: R" Y7 Z+ f/ F* Q4 @; ]; n7 Q end
    - Y4 E, J0 t7 k+ `  X# @7 Send6 I4 ?( M6 w1 q% W. z) H
    l;: @4 |1 C/ u9 u/ z# G, p; s
    z;0 v! L1 `& h: U( f- a
    ll=l;
    ; x4 [# f! t; F. } for i=1:n
    7 t- D4 p  b7 Y( Q# n* { for j=1:k: A  u- N6 s, a5 b+ Q
        if i~=s(j)4 M& `* ~% G2 e' E
           ll(i)=ll(i);% s7 U6 `6 Z% K4 S& W/ w5 }' D+ w
       else
    3 s, G: g: G9 Q       ll(i)=inf;) E3 o( C* m7 o$ f1 m' P& V! Q
       end( }( O0 @2 y5 l7 w. `6 P! p6 b( E
    end1 p8 ]' R2 T+ D8 j
    end
    - F" G4 Q' K" c! n2 p# \$ Zlv=inf;7 Z; U; u1 ?$ r* A% O# w
    for i=1:n' |$ I) `& ]6 n- [/ G, r6 e
        if ll(i)<lv
    2 N/ N- y* U' [, u/ D       lv=ll(i);
    # D9 \3 |' R% z/ o6 V       v=i;
    ' [8 U' e1 C) L. ?1 l/ j   end
    ( @) k$ c- a3 D2 T4 Qend
    ! D- Y8 N; H7 k: m, w# _lv;0 _2 B, D5 o+ {5 o
    v;
    $ ^% S+ p+ N& O; T0 vs(k+1)=v;
    ) ]/ _: I' r6 x/ mk=k+1;$ m$ ]( \( l. D! G
    u=s(k);, b/ ^- N6 B8 J; L! T- q4 w
    end9 m; O4 a1 X$ ]2 }. [
    l
    " m0 d9 Q% A1 N( f, ^z1 T0 i4 K' R* {/ K6 S

    ' E) i0 W$ ^" T& J(2) Floyd算法
    ! ]& V5 s7 U6 x( qroad2.m文件源程序:& u) O+ b3 B( z& u; K- e
    a=[0 1200 inf inf inf inf inf inf inf inf;
    7 i5 N4 V% b' d1 e' {# ~; H1200 0 12 202 inf inf inf inf inf inf;3 @8 u' H: y- \
    inf 12 0 inf 201 inf inf inf inf inf;
    ' B8 c$ C; R6 K/ [2 |6 Finf 202 inf 0 31 20 inf inf inf inf;
      T4 e8 `" }; e" x- kinf inf 201 31 0 10 inf 205 inf inf;0 p* x" `% F$ P2 N; P$ |
    inf inf inf 20 10 0 195 inf inf inf;
    ; r) i& E0 W5 Ginf inf inf inf inf 195 0 5 306 inf;
    ! P' y& u: o# r, Rinf inf inf inf 205 inf 5 0 inf 194;6 H- H" x) I' e2 B5 z% y
    inf inf inf inf inf inf 306 inf 0 10;
    9 ^" ?3 d' l. L, Q! o/ Z! [+ W( Winf inf inf inf inf inf inf 194 10 0];: H0 v+ ^* `/ F8 f1 r; }/ p
    [D,R]=floyd(a)
    1 k5 ~" G( y) m2 T6 bfloyd.m文件源程序:1 s+ T. E& O7 Z  n% ^
    function[D,R]=floyd(a)* {0 y8 G7 A/ w( H3 q
    n=size(a,1);
    9 @  y4 \. b$ n" M6 ?0 |: _5 m5 E: j# {/ ]D=a' }, u% }; f! J* y, ?. b
    for i=1:n+ p0 k! }& c* y( C
        for j=1:n
    ' T/ c0 f! K8 ~/ r" `0 D! D! M* E        R(i,j)=j;% `/ j1 Q( E5 Q. ~& M
        end7 D4 k* V+ d8 }2 H& y6 S1 L
    end; j8 f' P" M) z* U
    R/ F2 o5 f9 o" F+ v9 k& f
    for k=1:n
      h+ a+ l7 J. N7 b! F    for i=1:n
    9 d0 a0 D0 V; h0 ]$ z1 ^( q/ S( c  J" w        for j=1:n7 v/ {1 ~" M% W
                if D(i,k)+D(k,j)<D(i,j)/ A9 n- E# w# t; y
                   D(i,j)=D(i,k)+D(k,j);
    ! _+ i& U8 y1 ~8 l               R(i,j)=R(i,k);
    , a1 N+ s, _' m  k; o           end
    9 D5 a# @' k, r6 [) y( h       end
    ) R& V+ @( C8 ]- M$ @5 X, ^0 c5 C   end: X) X$ Z, E& |; T- e2 P
       k$ m+ c$ C! I5 p. j6 B
       D- [4 R. Z$ F! k6 z# s& {$ }% S
       R! F2 {/ Y' n$ R4 a% n3 y
    end5 c/ ^' y: B9 r
    五.结果分析
    $ N. R3 {2 U7 k* ^5 H) ?(1)Dijkstra算法, p9 |: m- R' H0 {
    运行结果:
    , p, W# U8 @( T3 z$ xl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
      l% }3 K' W( j+ P% T% G- q9 `z =1     1     2       2     3       4     6      5      10      8
    2 J% h7 m3 {  Z- e
    3 v) J2 Z7 K; M& c! h结果分析:* j, g( A, [$ ~/ R
    通过运行结果: 到其他顶点的最短路的权 ,可看出,3 V- \0 L% K2 ~7 S
    到 (即 到 )的最短距离为1812(km);" k4 \/ _  O/ @6 p& V
    到 (即 到 )的最短距离为1618(km);( i; Q/ J$ [3 Q" ~% `% P+ \
    & I9 W" t8 Z" ?! d0 r
    到 的最短路径为:V1→V2→V3→V5→V8→V10;. K  b" P- Q- C8 T. ^4 k
    到 的最短路径为:V1→V2→V3→V5→V8。9 H6 A; a2 [& j. ^4 d

    ' @7 v( S# b' _' l6 ~( T(2) Floyd算法
    - f) o4 K% \  l  s运行结果:
    * G7 y6 J- a! D0 [+ S' r7 e8 pD =
    ( y  n. b# ]2 U$ ?; _2 h& [8 G     0  1200  1212  1402  1413  1422  1617  1618  1822  1812* t+ X3 S' C' t; C
      1200     0    12   202   213   222   417   418   622   612
    . b% t# _- m0 _2 w. ?  1212    12     0   214   201   211   406   406   610   600
    # X0 ~* ^, f, Y  1402   202   214     0    30    20   215   220   424   4143 j% N+ k* k+ \4 D$ w  ~4 I6 n+ b
      1413   213   201    30     0    10   205   205   409   399& N) T! k4 B# p7 y0 S
      1422   222   211    20    10     0   195   200   404   394
    4 g4 |1 W7 ~/ T$ U/ i+ c" U/ G, R  1617   417   406   215   205   195     0     5   209   199- x( d/ V) [2 o& S$ p0 u9 Z
      1618   418   406   220   205   200     5     0   204   194
    : M* [$ F8 }7 ~3 Q0 C6 }+ x" `  1822   622   610   424   409   404   209   204     0    107 L! J2 f$ H  i* o; j
      1812   612   600   414   399   394   199   194    10     00 ?( Z* D$ U7 ~5 P3 d

    . T# U5 P! r4 b& r  N; C) [R =
    ( b+ X7 ^4 e' h   1   2   2   2   2   2   2   2   2   2
    ) O5 K  j$ M- `) W1 R$ g, C   1   2   3   4   3   4   4   3   3   3
    7 C! @; U5 M7 T5 X+ u8 |   2   2   3   2   5   5   5   5   5   5
    # D" x4 v, W$ m. i( d1 R   2   2   2   4   6   6   6   6   6   63 z/ a) _8 T$ n& F4 B
       3   3   3   6   5   6   6   8   8   8
    , ]) m6 `! [& u4 r' @   4   4   5   4   5   6   7   7   7   70 L$ i) m# f! g6 Z1 ~; W. N+ O
       6   6   6   6   6   6   7   8   8   8- p$ @8 A' i+ u  g. G. o* }" C
       5   5   5   7   5   7   7   8  10  10
    0 W- i3 W5 g) e+ ^  10  10  10  10  10  10  10  10   9  10  H+ ~7 W: h' [- q- e! |% t
       8   8   8   8   8   8   8   8   9  10
    # c% p) z, e8 q结果分析:4 I5 G" V" E5 \
    通过运行结果:可看出,
    6 `) \& A- L( b1 i6 f3 F 到 (即 到 )的最短距离为1812(km);
    9 J( V/ v; w5 S2 u9 Q 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    7 F5 n  I* g" H3 t7 g 到 (即 到 )的最短距离为1618(km);
    . Y* H, z0 ?. X2 G4 u4 G 到 的最短路径为:V1→V2→V3→V5→V8。- a' X4 w7 g! @! q7 g* ~
    2 H$ K- L% e# \
    4 J! a2 d6 J# T) Z2 B
    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 08:04 , Processed in 0.386137 second(s), 55 queries .

    回顶部