QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    5 W  x1 M3 O5 E5 Q* P一.实验目的:! _. G  k; s: v4 k. o
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    7 y# U/ m9 H' O  B1 m! Q0 h$ q. n2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.1 C6 ?; s& J. G1 n7 B( v
    二.实验内容:3 J, x( Q! W, ^& N* x, V0 Q9 s
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).) x5 d( Y9 Y% N& L- R; l
    为方便计,1km主管道钢管称为1单位钢管.
    8 O9 C0 @1 D2 p; ~一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
    ; Y2 r: ^# D5 E : C' a% N6 C) }5 g2 ^
    1        2        3        4        5        6        7
    - g  p; m: C- G% F 4 V7 q$ e8 [2 `& `9 c# v
    800        800        1000        2000        2000        2000        3000
    : I# R8 J  e8 C: b; }
    & t: \$ F" ]( s  u160        155        155        160        155        150        160, d; Q7 E. X, |* I+ y, [4 e
    . u+ \1 T/ P/ D2 m, O4 P' r' V
    1单位钢管的铁路运价如下表:
    % A; R$ O& z% w- h" D% q9 G  V' b里程(km)          300
    5 [- a* w9 B- q+ P- L2 Z301-350        351-400        401-450        451-500
    4 }  T/ v3 Z/ c. o运价(万元)        20          23          26          29          32
    7 C  j. L# k9 s/ h" i8 B6 W* R+ d里程(km)        501-600        601-700        701-800        801-900        901-1000
    ! z6 E  B4 F3 V% E, O' }) M7 y运价(万元)          37          44          50          55          60( R! d& S$ z; Q
    1000km以上每增加1至100km运价增加5万元.
    3 |% r! V: r  }! a公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).* y- u2 C" d3 U9 ~8 S+ V
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.9 Z% v. r' V2 I5 p# d' O$ i
    ( O1 c" r! m- s0 y
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
      C7 S# B8 V- v) t: y* s三. 模型建立
    ( a+ b6 v. D: m  p3 d/ w设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :% C* H! M- x# t+ f) n& H+ `
    ! z# ?8 T! E) }) L6 f% @
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    * W& U7 K7 R' ^& R* I/ k8 j
    ( S- w# B4 m2 @5 Y: e/ q8 X) \解:先写出带权邻接矩阵:0 t* d; F) `4 c9 F0 D& X$ F
    7 O0 e9 g- J3 h0 ~
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .$ h+ U! `: {2 C7 a5 F
    四. 模型求解(含经调试后正确的源程序)
    # e/ A8 [) ~7 s, T% E(1) Dijkstra算法0 q# _* o5 x6 W( B+ n4 C
    road1.m文件源程序:
      S2 c& T0 g7 f: qw=[0 1200 inf inf inf inf inf inf inf inf;; B+ J1 I4 }4 i4 v, F
    1200 0 12 202 inf inf inf inf inf inf;! _# n  _/ {$ E* \* b# F
    inf 12 0 inf 201 inf inf inf inf inf;' |& r" f  x9 s/ \; C
    inf 202 inf 0 31 20 inf inf inf inf;- T) B4 ~# L8 i9 B0 k5 q; l' o4 k
    inf inf 201 31 0 10 inf 205 inf inf;8 D) U7 b6 R8 r
    inf inf inf 20 10 0 195 inf inf inf;
    : t/ z' p( ~8 X4 Einf inf inf inf inf 195 0 5 306 inf;
    ! n- M9 z' s9 E* _inf inf inf inf 205 inf 5 0 inf 194;
    ' L. b# c( q9 [- j- d6 Rinf inf inf inf inf inf 306 inf 0 10;
    : e. t+ ]) {6 O2 Sinf inf inf inf inf inf inf 194 10 0];   v( e, b$ }. k$ {" g
    n=size(w,1);
    / D' p$ f( M5 |w1=w(1,;
    $ J0 a0 \5 o8 y( b7 afor i=1:n
    + R* F7 [; r) J% F    l(i)=w1(i);  I4 ^' H7 W( l% u, [, l3 U# k( e
        z(i)=1;
    , U5 k! ^2 ]; t( s; [- l; E* Iend
    9 K: n' k2 W2 y8 Xs=[];
    / s- b, g% f- L, E2 i& Ts(1)=1;
    / m5 U& W% L3 j" I  H0 R! o$ bu=s(1);
    : j7 t( J5 B- e: @+ N; j7 }5 O! Ek=1;' H/ W6 E% x+ m8 v( S3 S0 H
    l;
    4 W$ F& s! |1 H# \3 O7 Bz;# c* u& O: u' q  t" G
    while k<n' w4 j/ e: z1 m9 y( p/ W  T/ J! J
        for i=1:n2 e) `0 P6 Z5 |( X9 T3 c2 ^( e0 b
        for j=1:k* W" ^) d' a$ [) s
           if i~=s(j)  X' e# ?; a: |$ R+ h0 g
              if l(i)>l(u)+w(u,i);* K7 K* b) u  q. e  E: h' g
                 l(i)=l(u)+w(u,i);- t; c- t, G! w5 R- h" r
                 z(i)=u;
    0 U0 u% q. ^+ V% @         end; Q4 C$ q2 P7 Q# t) z
         end
    5 G1 E+ P4 H1 K' `+ P end1 B+ U2 t* ]: a5 F# u4 X
    end. P$ N$ o, L8 U# A) O# h: l& C
    l;
    # _6 B: M$ r8 ]' A8 i. k* c- Y z;1 }+ @+ t8 I# f5 N2 t1 ]1 ~
    ll=l;
    3 X- k, H# M7 u$ Q0 j" {! q  H  y for i=1:n2 B7 W) Y( d* y1 F9 r  j6 y( c& h
    for j=1:k
    ; y4 L6 J: ]9 @  v    if i~=s(j)6 k! k  V7 t9 q, G! `+ ?
           ll(i)=ll(i);  A" n  v5 G2 ]+ A; T
       else6 [, E9 D9 W8 M# _: d8 E% b) }$ {
           ll(i)=inf;% U# v# [5 Z9 O. X5 _
       end
    & E: l  {( b- t" I: V- ^9 Send# V- e; }2 m# j. {, x& q) N
    end' u- I' Y2 }9 V! g# {
    lv=inf;
    # r  V) l2 y' k! H( t5 Jfor i=1:n
    , C" ^8 x1 L. p0 K& z    if ll(i)<lv( Z. @9 M2 c1 D
           lv=ll(i);+ H2 O# g4 C; G) M/ R' q& x
           v=i;9 P, s9 R  [7 B$ z. f
       end2 S6 T$ y9 k6 m
    end
    ) Q" {; A$ f2 }lv;
    0 g% N% R( I: s: O9 {v;/ s. ?  N3 g+ @4 ~7 A( c
    s(k+1)=v;
    2 I0 l9 ]% }6 L, f3 J0 ]k=k+1;, E  J  ]9 S6 L8 i
    u=s(k);+ Q$ w% V- k6 E4 b- u' X0 T5 c
    end
    ! |: c: e- r3 Cl6 T( |- u8 ^& J( j; Y
    z
    0 Z. I$ _- ?1 D! m' R4 L7 D! r4 b' `( [4 }8 b" M
    (2) Floyd算法
    . `8 M5 r  h1 C8 Xroad2.m文件源程序:8 `, }  ^( e9 K% A3 j# `5 T
    a=[0 1200 inf inf inf inf inf inf inf inf;
    $ e3 {. n6 T$ I3 S; c, a8 |1200 0 12 202 inf inf inf inf inf inf;. g4 @! C  s- `4 e( [
    inf 12 0 inf 201 inf inf inf inf inf;3 \. v" m, M" C! R9 z. c8 |0 D( ]$ u( E
    inf 202 inf 0 31 20 inf inf inf inf;  G: m4 m2 R4 K) x! H8 Y+ D
    inf inf 201 31 0 10 inf 205 inf inf;
    3 }7 Z$ t4 }9 D7 n* g/ P- V) h2 Ginf inf inf 20 10 0 195 inf inf inf;! I8 Y' m% ^: g/ ^9 v: N$ e
    inf inf inf inf inf 195 0 5 306 inf;
    . t2 m& l& p# Q% Y9 G7 z6 |inf inf inf inf 205 inf 5 0 inf 194;
    # ^4 [# i4 C  z2 \) u; ^inf inf inf inf inf inf 306 inf 0 10;* _/ X4 i' v- d0 j6 O% Y2 ]
    inf inf inf inf inf inf inf 194 10 0];
    5 b/ X, t) h6 `[D,R]=floyd(a)" p! y: c* [8 i, N
    floyd.m文件源程序:
    8 g% s, H2 s- cfunction[D,R]=floyd(a)
    & p: r+ G0 y" i6 T6 m1 q! un=size(a,1);
    5 @! X5 C; L6 n* C9 _: g* v8 F% E1 ED=a
    7 c. m9 m: i1 |$ T4 @for i=1:n  F' f( t1 j- e2 S" Q' P
        for j=1:n
    ' a  w- M5 z* f# i1 `        R(i,j)=j;
    # m7 q/ _3 Y) ^  x    end
    - R5 A1 W. t0 n8 \end) [3 ]: ^1 O5 O; r
    R
    / j; `9 B5 d  f8 P) q0 ffor k=1:n* `5 k; {+ s% d& ^  K8 t. {
        for i=1:n9 ]5 t" Q8 _$ F3 u8 |
            for j=1:n% B8 C5 r+ F! \7 E9 T# U1 `1 l
                if D(i,k)+D(k,j)<D(i,j)- F- G/ W2 L9 Y; V" i: ~% K4 d9 ~
                   D(i,j)=D(i,k)+D(k,j);
    . n3 T4 r9 n' r, A7 o+ s5 z               R(i,j)=R(i,k);
    - q5 ]" j/ @9 j4 |0 v3 x  V           end
    ; Q$ T5 g7 h# H. p, T  m- g1 ?. Z       end$ W$ _0 }: Q% P8 e" |7 V
       end: D- k9 v3 R% w/ h/ U& R
       k
    " j& f9 D" a. D/ h   D  z% p$ {6 k$ J0 H4 a* D5 K
       R  X8 p- ^7 a$ |7 O* V/ ^' R3 ]6 }
    end
    , o  b7 Z$ n1 D9 v4 `; A( L, b五.结果分析0 `# a7 Q( m& d! ], s
    (1)Dijkstra算法- r4 s4 J% ]5 o* ~/ ?# @* G
    运行结果:. ~$ H4 q  y, D3 S; t4 U2 b: W
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812' Q  N) R7 W# n* [6 u
    z =1     1     2       2     3       4     6      5      10      8. c6 `- {, P' @% {- I/ B- i
    ; P5 A5 t/ N5 e6 t$ n$ I/ f
    结果分析:
    * w# K% Z6 w: W通过运行结果: 到其他顶点的最短路的权 ,可看出,) r0 Y" N  M- y, T, E4 ?: e; R; R
    到 (即 到 )的最短距离为1812(km);3 x; K0 A4 ?+ _7 a
    到 (即 到 )的最短距离为1618(km);
    + O, h, |, d8 _! _& a% Y( ~, O6 ]& u! u# m$ @6 p& O) ^
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    3 `5 }7 [0 g9 v9 Z; M7 y% O# U: H 到 的最短路径为:V1→V2→V3→V5→V8。
    $ Y2 |. i, w/ Q! M
    / e" f3 _) {0 ^9 C8 d/ X(2) Floyd算法1 y) a. V: \$ E, M. X
    运行结果:
    9 }5 R) V: k1 S/ A8 Y5 mD =' o4 U! a8 ^  |. X4 U2 Z& n
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812* J2 ?6 B# m) h: Q
      1200     0    12   202   213   222   417   418   622   612
    2 b4 x+ R6 c9 Q+ X9 U% e, b1 j  1212    12     0   214   201   211   406   406   610   600- a! O3 |8 w/ }# V
      1402   202   214     0    30    20   215   220   424   414
    ) e# K2 a# g0 C0 L  p& ~  1413   213   201    30     0    10   205   205   409   399) P( B; e( s! e( t' K8 B
      1422   222   211    20    10     0   195   200   404   3941 X$ M' Z# v3 p% x6 v
      1617   417   406   215   205   195     0     5   209   199
      h! j. t5 [' c9 t+ {/ h3 I  1618   418   406   220   205   200     5     0   204   194
    " ]$ u' ?% x" j  1822   622   610   424   409   404   209   204     0    10
    3 s( H( L' p" K3 R. K7 f  1812   612   600   414   399   394   199   194    10     0
    / u: ~& B3 e# {. z( A5 R9 N; B# l
    2 _- k8 J3 C( ^9 cR =$ p# p& B# m7 U, N+ ?4 k
       1   2   2   2   2   2   2   2   2   2
    ( N) U' Q+ B( \- z/ R   1   2   3   4   3   4   4   3   3   3( p( q4 i# `( @* l: X& a
       2   2   3   2   5   5   5   5   5   5% [$ b* |' k5 D* J
       2   2   2   4   6   6   6   6   6   6
    0 N+ h% l+ b- N. i9 K   3   3   3   6   5   6   6   8   8   8( {  R0 a4 M( X6 c
       4   4   5   4   5   6   7   7   7   77 o7 z. b( ]# D3 a4 G9 Z6 ?
       6   6   6   6   6   6   7   8   8   87 O4 h1 h) N( M6 v( x" g$ O6 z
       5   5   5   7   5   7   7   8  10  10
    1 e; f- d, K9 r. L' n  10  10  10  10  10  10  10  10   9  10
    6 |* @- e- j5 E( Q, h   8   8   8   8   8   8   8   8   9  10  N* v$ h7 ^; R  L8 x2 `, e
    结果分析:
    0 c( F* w8 e# X+ C2 y, ~* d通过运行结果:可看出,3 j! k/ N" G& k4 }
    到 (即 到 )的最短距离为1812(km);& T8 n/ X! [# a4 u  F4 c
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    ; }, X1 ~% M; n0 _* c  B3 o 到 (即 到 )的最短距离为1618(km);, h* g5 l) W5 g. D" @
    到 的最短路径为:V1→V2→V3→V5→V8。; R5 U7 L% m: F5 t3 A2 h

    ( f1 a8 I1 [' o) S5 d# B; j' ^9 l1 W+ G6 w
    + E" P) M: p. r) ^
    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-29 05:01 , Processed in 0.534078 second(s), 55 queries .

    回顶部