QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法; X2 X  \! U) y7 _% m3 C
    一.实验目的:0 n; g' G6 |' V5 b
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    , }4 A% h7 }( p8 s2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.; J# p) r' N; t7 G
    二.实验内容:
    7 G- v: W3 E+ b+ n; H+ y) q要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).. D% C% ?3 P, H
    为方便计,1km主管道钢管称为1单位钢管.$ j5 K9 ^; \# S* _( G* R8 G6 S& ?
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:7 |0 W) T0 Y; d8 i$ {
    * a, D8 Y$ B! {0 d6 ~$ y
    1        2        3        4        5        6        7
    # ~' N  K5 v9 z) ^, L8 I; I* c
    ) D1 _: Y( ?! X9 L800        800        1000        2000        2000        2000        3000. n0 e% ^# B; E6 v# \5 D
    ! }0 Y' s& f" r
    160        155        155        160        155        150        1601 @( M5 @) t) Y5 v5 v

    9 E! l3 x& M3 j% h, ]. b# t; u1单位钢管的铁路运价如下表:
    ) U$ s1 V3 Q' I) A5 _% u里程(km)          300
    # [! d3 S1 J2 g) N2 R; K5 W4 D301-350        351-400        401-450        451-500# |( e0 R4 O( S- {; z6 r
    运价(万元)        20          23          26          29          32
    0 Z. A, q" l) |) D4 ^7 @里程(km)        501-600        601-700        701-800        801-900        901-1000
    / r4 s: k% {" X/ N; t; W) Y6 _运价(万元)          37          44          50          55          60
      Y1 u" b' n+ D! m. y1000km以上每增加1至100km运价增加5万元.
    ' @% P: `, n/ o8 E+ a公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    0 N0 f4 [8 A8 O4 E. f$ y  X假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    4 s1 ?1 v% h9 h4 O
    2 M. [2 }+ r/ q" y试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.) n, ?3 `" i) {! a
    三. 模型建立: n- s% H1 l" H5 ~' b
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    # M# k9 ]' @+ E. @, H- D
    : L8 {+ v8 p& B# L. c利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    8 V( O+ C. E. N
    # a" O& j4 \. O8 v+ S+ D/ o% Y解:先写出带权邻接矩阵:0 ~4 X) A  K' E

    " T/ _/ Q- v$ I( f后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .+ |* D1 e/ |( H2 P. E
    四. 模型求解(含经调试后正确的源程序)! J: ]% J+ K# Z1 u5 w
    (1) Dijkstra算法/ @( r3 Q5 P5 z  ?- m; K
    road1.m文件源程序:" y, z& n& w$ C9 p* w
    w=[0 1200 inf inf inf inf inf inf inf inf;
    , x5 x& y, Q" m9 ?6 i1200 0 12 202 inf inf inf inf inf inf;9 }7 F. \  q$ N8 t9 w- q
    inf 12 0 inf 201 inf inf inf inf inf;  Y* m1 G- Q/ U# Q
    inf 202 inf 0 31 20 inf inf inf inf;
    % q7 D8 ?" Q! ~% e! R- linf inf 201 31 0 10 inf 205 inf inf;
      G8 h1 k' G7 r2 Pinf inf inf 20 10 0 195 inf inf inf;# N, i. `5 m* O8 z# l
    inf inf inf inf inf 195 0 5 306 inf;7 Q8 b. m# D/ |' P' Y# X
    inf inf inf inf 205 inf 5 0 inf 194;7 f% X- r" E% `3 m$ J
    inf inf inf inf inf inf 306 inf 0 10;
    0 A2 O2 k8 y8 k$ z& N# vinf inf inf inf inf inf inf 194 10 0]; . r6 i7 D' V( c& R
    n=size(w,1);
    3 Q! o9 k" G4 mw1=w(1,;: X' J: O7 q- j7 w2 o5 ?
    for i=1:n
    1 O% h8 o: E0 T& W7 ]    l(i)=w1(i);9 P, X7 @0 x8 R: ?
        z(i)=1;* a4 H; T6 v/ U7 l) F9 C2 t% L
    end3 N- A! M+ c( `' g
    s=[];1 H6 f( S. Z; \- a' }
    s(1)=1;
    ! N- J5 Z1 T. {* ~% |% d1 Ou=s(1);
      o7 _- \2 Y& g; V4 xk=1;
    0 Y8 `/ W. k8 y5 S. G% J; V- }l;
    - ~0 C: ]9 s8 c9 Z9 D3 ~5 T2 f7 zz;0 k' P" O) ^* L+ ~: e
    while k<n/ M" {- B7 N8 k7 @( f& J
        for i=1:n/ b5 ?2 I6 L4 m0 y3 n
        for j=1:k; n% v: A$ \% \3 B0 R
           if i~=s(j)
    2 @+ D3 K" d/ ?0 t          if l(i)>l(u)+w(u,i);
    7 g$ U& ^% Y# ?/ t0 `$ q0 y$ m( j. a             l(i)=l(u)+w(u,i);
    ! b9 @3 P1 L' W             z(i)=u;
    ' I6 a6 S7 ~7 c- `& l$ {9 n- f4 |  W         end
    4 o% O1 @8 Z0 c- W" x     end+ {# u6 D: e8 V8 v  U( ~/ \
    end
    , g& g0 C& C- E. r" D6 dend% E7 B' [8 j3 Q
    l;1 f9 }3 w; O; [1 s% O
    z;: U5 I' o8 [' `: \4 w- W
    ll=l;' |6 v( K5 {" p% s3 L
    for i=1:n* P- }  e6 W. q* c
    for j=1:k
    & {- W& u; @& K/ n& N$ U    if i~=s(j)# ]+ p& d6 D/ J) U0 n* @
           ll(i)=ll(i);& o& b0 @0 d! _! F
       else
    ' V" A' W; p- {2 k$ ]" I       ll(i)=inf;7 g# T' S& k: }  ~; E+ w# c( V
       end: u$ M) |! F! J' X
    end
    $ U! r$ j: b$ m$ \end) b& A. S* w" u
    lv=inf;4 d2 r8 d& {* I" v4 R! [
    for i=1:n
    & H6 ^7 s* e0 }% O% l: s/ `    if ll(i)<lv& b6 }6 ]4 P" s) U
           lv=ll(i);1 D& D8 H9 H5 C: @' M
           v=i;
    2 B7 ?6 v& ?! w( x   end
    8 Q% o( p! q3 p' n# `end
    7 `; z4 a: m! {, Clv;4 d- @1 y5 H$ ?! R+ F! ?7 ]  O
    v;
    # v0 S5 l: R) m6 U( ?+ ~# {s(k+1)=v;6 R7 H3 z+ n& `) u! d
    k=k+1;
    $ {' k' T! _! Xu=s(k);1 N( a1 F5 u# {1 h& s4 ~9 V% a( B5 N) Q. X
    end% y& Y5 V1 j# x- ~4 |4 m
    l
    ; J& U, x% B. G& [z
    " |) `5 {9 S2 c' ~, q  f6 j& k- X, @  L# ?! M
    (2) Floyd算法" U0 b7 L& p1 k  W- M) q
    road2.m文件源程序:, T( B5 M# }$ ~3 x
    a=[0 1200 inf inf inf inf inf inf inf inf;3 n: F; }$ x) ^- T5 B  V
    1200 0 12 202 inf inf inf inf inf inf;
    ) |7 x9 k3 F+ xinf 12 0 inf 201 inf inf inf inf inf;* q( D" i% ~: |
    inf 202 inf 0 31 20 inf inf inf inf;. p5 h3 k3 M8 [* e; V  s  @
    inf inf 201 31 0 10 inf 205 inf inf;
    2 v+ k( u" g+ r/ a7 Z- V; linf inf inf 20 10 0 195 inf inf inf;! P  B: y$ E4 i! Y* j% z
    inf inf inf inf inf 195 0 5 306 inf;% q- }# N- G. y( O- `. l/ I, ~
    inf inf inf inf 205 inf 5 0 inf 194;
    % [$ H! P' V9 J: C) |inf inf inf inf inf inf 306 inf 0 10;
    3 v* b2 f; E( Z& ~3 Yinf inf inf inf inf inf inf 194 10 0];8 U0 q. E( E& V  C8 w  f
    [D,R]=floyd(a)
    5 h3 q" ?+ y" e7 T9 k9 V( mfloyd.m文件源程序:
    . Y3 a7 k, |) N. G# ?function[D,R]=floyd(a)) h5 d) v6 S* Q* J  Z
    n=size(a,1);
    & V( L; h: K7 f. @0 K/ ^6 U' F6 R3 kD=a0 T9 D5 A' b) L
    for i=1:n1 _/ p* Q+ a- R" v( ~. D7 o0 t" G7 F+ G
        for j=1:n: D# U2 e( B. U+ ?: S4 B0 z/ L6 C
            R(i,j)=j;
    ) F" z  B4 Y5 h* @    end" K$ p# M6 @  T8 ]" u
    end, V+ U0 n5 F$ N+ b3 E
    R
    4 Z! f1 r% ^" X  z2 {$ E( i$ Kfor k=1:n+ O/ i1 k4 m  t" E7 W4 q! t
        for i=1:n+ j( @7 h; o3 {
            for j=1:n) ?* x% u* }% b5 R+ ]: z
                if D(i,k)+D(k,j)<D(i,j)2 q% L, G( A0 ]# f$ ~
                   D(i,j)=D(i,k)+D(k,j);
    . Z- [& k/ h1 p  M, R( z, C6 E( _' x               R(i,j)=R(i,k);4 O3 _8 e: S; H
               end
    + E4 W( e3 T, M3 J       end) B0 ?( `8 w! f. U9 G& {
       end! M# s4 O1 u+ |6 f6 y+ t
       k
    5 T' y) T# U. U- q7 |' q/ T9 Y   D5 D* m* I0 k- x& N3 R* r/ z
       R
    1 N& F: u5 l0 x2 Rend
    6 r& p% L  c) |( Y9 u- }, h. i' X五.结果分析) v; w) C. E0 Q/ T' q
    (1)Dijkstra算法
    " N% @# V2 t+ e3 q5 [; d运行结果:
    . b  s, i1 A6 y) |5 K* k) xl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    2 ?+ \5 h% q) j5 k3 Nz =1     1     2       2     3       4     6      5      10      8
    * o) d: s2 N5 V) E6 `2 B' k( s 2 I6 \) F( a% L' Y! P6 f& m
    结果分析:9 T  T2 g( y, K5 W% C$ r
    通过运行结果: 到其他顶点的最短路的权 ,可看出,$ Y/ i1 c% ], n& ]% Z" o
    到 (即 到 )的最短距离为1812(km);+ r5 x# m3 ~& n5 d9 }0 e
    到 (即 到 )的最短距离为1618(km);( J& S' D  T# P+ I; w  e; a
    * R$ c) n  B' C0 m/ C  o; n" d
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    , M, X- @% B5 r) e9 K  x. Z6 f 到 的最短路径为:V1→V2→V3→V5→V8。; h2 I5 m( s9 i0 b

    3 [. e4 r, r$ h+ ~; D(2) Floyd算法
      E. _. r8 W; r, _& b运行结果:, N: B- n* w# k# e
    D =
    / Z2 d3 S% J: {     0  1200  1212  1402  1413  1422  1617  1618  1822  1812! Z- }5 s# ]6 Z
      1200     0    12   202   213   222   417   418   622   612% i8 |2 D! R9 o7 m2 h8 C/ S% Z
      1212    12     0   214   201   211   406   406   610   600
    ' U! B4 k0 Y) t8 v' V  1402   202   214     0    30    20   215   220   424   414& V0 V2 m. R, N; Y  t, E
      1413   213   201    30     0    10   205   205   409   399' F8 T; y: ]. d
      1422   222   211    20    10     0   195   200   404   394: O- M' W- Y% i7 o5 h8 Y
      1617   417   406   215   205   195     0     5   209   199
    2 w3 M9 m9 U9 y! v  1618   418   406   220   205   200     5     0   204   1940 h1 b* O" [" a7 _# h4 i# c2 u' I
      1822   622   610   424   409   404   209   204     0    10
    " r+ Q2 Y, r' G4 d  1812   612   600   414   399   394   199   194    10     0
    1 S% ^+ F% Z# r+ I! v* Z; v% s0 S: g4 F; T6 M, ]9 h# z" S
    R =0 z) F1 R8 P; N& k) C
       1   2   2   2   2   2   2   2   2   2
    6 N  n% Y5 r( G( X% q   1   2   3   4   3   4   4   3   3   36 Y; ?5 r1 p* h
       2   2   3   2   5   5   5   5   5   5
    3 e3 R& ?# _7 c) g+ I   2   2   2   4   6   6   6   6   6   6' @$ S& p/ O6 d& C4 J
       3   3   3   6   5   6   6   8   8   8
    ) s2 L2 B, {0 X2 s! B   4   4   5   4   5   6   7   7   7   7) i5 m$ l7 ]9 \* _3 K" c
       6   6   6   6   6   6   7   8   8   82 Q9 P2 p8 J1 g# j4 G6 u: p
       5   5   5   7   5   7   7   8  10  100 ?9 X; s" w9 B( W4 a4 F- m
      10  10  10  10  10  10  10  10   9  10
    8 ]" }4 ]: Q1 J5 V5 Y   8   8   8   8   8   8   8   8   9  100 F- M. h5 p' ~" e% s" g
    结果分析:' e$ A- K3 F% }3 w# ]
    通过运行结果:可看出,4 Y9 o$ {' b" y- B/ z! e6 `
    到 (即 到 )的最短距离为1812(km);8 |- P" G/ E" y' Z4 r' s' K- x  J6 g. J- G
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    5 o: F# _0 [6 w, H8 D! P2 G 到 (即 到 )的最短距离为1618(km);
    " W6 `0 ?  X# ?% |; f+ P 到 的最短路径为:V1→V2→V3→V5→V8。
    # G7 g' P/ }$ P5 m" m7 g0 q; X( y$ [0 k; b

      A2 g; e7 I- T
    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-11 05:31 , Processed in 0.465776 second(s), 55 queries .

    回顶部