QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    ; ]9 P' l- @, h7 e  h0 ]8 L一.实验目的:
    0 B* G" v9 o# U1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;  e9 F& J) v* b) R, \
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    / ^7 [3 O4 K+ P) a: ?. p二.实验内容:: H% [& o6 u+ q# g8 o# n
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).! n6 F+ ]7 c( y
    为方便计,1km主管道钢管称为1单位钢管.# I# c/ E# y$ x1 r+ j
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:1 Y$ W8 Z: F; J9 R* I. k
    ' t) y% O$ }7 g9 V) A7 i3 `
    1        2        3        4        5        6        7
    8 e& A3 K" a  {7 v( u( r
    - }- B& R; S1 t8 I) b9 i800        800        1000        2000        2000        2000        3000
    ' p( ]2 \1 \3 Q5 G, |( q* ?: k   Z4 D# p3 B* x4 d- K
    160        155        155        160        155        150        1609 D9 k1 _  E$ H0 O! n4 K

    - i$ `+ N+ p" @6 E2 h# I0 Y1单位钢管的铁路运价如下表:4 z, W+ r6 a* P9 z+ e7 O+ X9 w. J
    里程(km)          300
    . C. o. \2 v/ N) o& z# L301-350        351-400        401-450        451-500
    * o& p( s7 e& x运价(万元)        20          23          26          29          327 {; r& ]) t0 G0 R$ R6 K
    里程(km)        501-600        601-700        701-800        801-900        901-1000
    ( A; K& x$ T6 w* Q运价(万元)          37          44          50          55          60+ q& u4 B2 b& {  F# |
    1000km以上每增加1至100km运价增加5万元.
    ; @; N+ @5 ^8 x公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算)." e/ D/ M* Q8 S* `/ `7 W0 U+ x
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    3 C4 P! b4 S' I6 ? 4 S  l/ q. k( R$ m* }) P2 e
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.* S( u* A) N/ Q! I6 e+ O+ s. Y) E% z
    三. 模型建立7 u. E' j, S( g' U
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    , |, N) f, @4 M; s6 `. X2 P " D6 A' K& C2 I, d$ }) E
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离% T* B) a- H, D

    + o, t/ j4 Y5 t7 G; U1 O" T2 O& [' I解:先写出带权邻接矩阵:+ F9 ~  }! ]0 o# C) e6 X
    . `8 F4 ~& h9 M  g( C: N
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .0 S# s) u9 G- t) m- D
    四. 模型求解(含经调试后正确的源程序)
    % a  ^) |* Q7 w' |  Y* S% `4 m(1) Dijkstra算法% m9 k: K9 y; Z; T7 _
    road1.m文件源程序:1 y; h( N9 Q" g! F. T
    w=[0 1200 inf inf inf inf inf inf inf inf;+ B) W7 c; I3 z  [2 Y! L
    1200 0 12 202 inf inf inf inf inf inf;9 i" l3 B% X: X, R; B* p! t
    inf 12 0 inf 201 inf inf inf inf inf;
    6 i0 l) l6 x, f$ R- Pinf 202 inf 0 31 20 inf inf inf inf;
    ) o0 |6 w0 P. j4 c$ ninf inf 201 31 0 10 inf 205 inf inf;" r: F' W/ ^$ H3 U7 s
    inf inf inf 20 10 0 195 inf inf inf;
    & B3 O; k. C8 L; binf inf inf inf inf 195 0 5 306 inf;( l0 u, X1 T) |8 W
    inf inf inf inf 205 inf 5 0 inf 194;8 z0 M0 ]5 E) f, W" @0 b5 d; B2 u
    inf inf inf inf inf inf 306 inf 0 10;, {1 V- {+ T& f+ N- S
    inf inf inf inf inf inf inf 194 10 0];
    . |( W# F- l% W& C/ on=size(w,1);
    ) V# A$ b, p5 ~# ~! hw1=w(1,;5 h# p, i2 Y0 _4 f' E
    for i=1:n
    ! _4 c4 p) \' Y    l(i)=w1(i);
    - k* s# C) p+ D    z(i)=1;9 u% |7 k( B! x% T8 F5 q) B; o
    end
    ' T5 q" @( E* t9 V7 |s=[];
    ( m, V$ s. H& [! ks(1)=1;: t+ |9 ?( S5 b+ L8 t9 U: o6 H& Z
    u=s(1);3 f) H' q" g/ P% w
    k=1;; Z- g, T2 J* j- M% j
    l;) r6 V4 k9 t; X0 n  {2 p7 p. H+ [
    z;
    ! N' j/ K3 u3 Uwhile k<n
    # P7 a& u% H8 Q) `; P+ q    for i=1:n
    4 v/ Y5 f) E5 Y0 e# p    for j=1:k
    + b9 W1 O6 ^4 z" v; w' E, o       if i~=s(j)" ]$ {2 O# T  g) P1 ]
              if l(i)>l(u)+w(u,i);  s7 g9 Q% s; ^3 g
                 l(i)=l(u)+w(u,i);6 T& f) d' u, y
                 z(i)=u;
    - b4 A3 d- c% T4 B5 F. U% y         end
    ' K, c: ]/ H# @& H     end, g' f0 Y9 ^, Z: Q7 F) G( s
    end
    6 q* ?% C- z5 N9 Y& k6 q$ l2 c. send
      d8 T! t) C( h$ u. Q l;  T5 @8 p2 V7 y: G
    z;
    9 |7 F0 B( j  g, n+ \6 u& l2 ^* H% Mll=l;  D: j- Z( t8 D
    for i=1:n
    / U# l1 a/ q; D, G  J% M for j=1:k( q6 t/ T1 \' L9 j
        if i~=s(j)
    . v1 k" m) k9 c3 }9 ]$ {' V       ll(i)=ll(i);
    & C2 F$ _3 A8 ~* e7 @2 y4 x   else8 y0 j: b% X% O* V' n
           ll(i)=inf;
    4 w% ~+ k4 d2 S0 t) p; v  I# z   end$ ]" J5 z' U$ w! ]+ T$ |4 p7 H
    end2 K& M0 X" T; t, e' t9 T, L
    end: v. p9 z& ]% v2 K8 h+ H
    lv=inf;( u3 s+ N/ P/ K5 g: E7 v" y( }
    for i=1:n
    0 z; S+ t/ Q4 u( C. O2 X    if ll(i)<lv1 z4 ~- d+ D1 o
           lv=ll(i);
    4 Z/ P1 ~, s9 }2 i       v=i;( k: t, D+ z3 K; X) k0 B
       end5 f# k! R8 r" N5 |+ j. g
    end
    3 i$ S9 F$ B" K" W  J/ Alv;
    + E; K# `; Y+ a" Wv;1 N6 `/ p5 F5 L, z1 r7 D6 K7 t
    s(k+1)=v;0 v! m7 V+ P. a' x: w/ F
    k=k+1;
    # g! U- Q7 J" O& J* u! a9 eu=s(k);
    & s8 P' @" V6 e  Rend
    " \5 m2 i2 u  [3 B/ yl9 b2 {3 R/ `8 {& I2 k) S" B$ i- T
    z
    - M! p7 [* v  b3 [) f3 z6 i3 I# O( g6 D' A- e0 J8 t/ R7 V
    (2) Floyd算法/ ]% ]; Y* n. g
    road2.m文件源程序:) W. _. O4 T' w" F1 E6 X
    a=[0 1200 inf inf inf inf inf inf inf inf;- l, ^2 B+ T! }0 q9 E
    1200 0 12 202 inf inf inf inf inf inf;% s6 o6 }. n6 ]! S# o
    inf 12 0 inf 201 inf inf inf inf inf;
    1 `; z5 c' e: j! `; U& ?9 g; zinf 202 inf 0 31 20 inf inf inf inf;
    # A# O) `) T$ binf inf 201 31 0 10 inf 205 inf inf;
    8 M5 k( q8 _& E- Zinf inf inf 20 10 0 195 inf inf inf;
    8 z- p( [$ o+ M2 v/ t1 E/ P) Vinf inf inf inf inf 195 0 5 306 inf;+ J5 X( G- E. v+ T
    inf inf inf inf 205 inf 5 0 inf 194;
    ! n) V* V6 G1 iinf inf inf inf inf inf 306 inf 0 10;4 Y- O1 M/ c# x) o4 d
    inf inf inf inf inf inf inf 194 10 0];
    4 ~0 w' Y8 ]( Z[D,R]=floyd(a)& Q7 A5 p, s6 O7 @; f3 u
    floyd.m文件源程序:- l  J4 S. h! C
    function[D,R]=floyd(a)
    4 l( X, \( ?9 ^. ?- fn=size(a,1);
    9 }1 f# m) `, k) @( [D=a
    ' E# S8 o6 k) V; T7 q% Ufor i=1:n3 c4 f) v: p- m
        for j=1:n
    ) O1 l% R! M0 F5 J  U        R(i,j)=j;- l6 `1 B& k: D8 Q! q; l0 L' M
        end3 q# S# U) k, C; d+ P
    end3 g& a3 ?9 b& P: E$ L2 G
    R- Z: Q7 \  H/ ^. J% ]! T9 |
    for k=1:n
    9 v5 I8 a6 X& G  U* Q    for i=1:n
    : a1 A  J% z' x) _        for j=1:n
    2 k& \$ u) b$ k& D% H; u            if D(i,k)+D(k,j)<D(i,j)# n4 x* Q( r" b$ f: Z
                   D(i,j)=D(i,k)+D(k,j);1 ?+ H4 E2 j, M5 Z: `
                   R(i,j)=R(i,k);
    & j0 c6 g  M9 m; W: G$ N9 |$ U           end
    0 f, y0 f% S9 |8 N. {" F( ~       end+ f$ S5 l/ j" l) U
       end
    % t4 z0 |/ t0 X0 \& [   k
    ( z6 T" H+ o9 \+ `5 r0 V   D
    ' W  M( ^" K: T  ]% v   R
    & S& w- a! B$ ~4 ?) S. }end/ }% {9 i5 x' C( f& G
    五.结果分析
    ( N; E5 F& ]! ^& V. s; i/ u(1)Dijkstra算法# t+ g0 a  o) w! a, k6 B6 \
    运行结果:2 T+ [9 s% X  N, I1 _; j5 {8 n+ e, H
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
      I* q- E* Z5 U, \z =1     1     2       2     3       4     6      5      10      8
    ' f6 ^% Q+ `' R5 O. W ' a1 _: x2 ?& {
    结果分析:" J' i; m: o1 E8 H! [
    通过运行结果: 到其他顶点的最短路的权 ,可看出,2 O9 U' m, A/ n1 O6 y4 R; m
    到 (即 到 )的最短距离为1812(km);
    % r0 g- b: Y) @& f' R3 ^9 z1 K( X 到 (即 到 )的最短距离为1618(km);
    8 S. q, }2 M- I$ F9 r1 v2 V+ d8 ?0 K+ m4 M2 u8 R$ X" s
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    9 g% F6 c/ V: d+ E7 ` 到 的最短路径为:V1→V2→V3→V5→V8。
    ' A; k* j& g: u* A6 j/ m5 ~  i  ^
    * B% [0 y& l! O# J5 w(2) Floyd算法8 \1 M4 K9 C+ D' _% S, z, H
    运行结果:3 z" b7 L. y7 a& o, m3 e" g4 M
    D =, i& Z+ ]2 |4 K. }/ H! x
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    7 E1 G& D7 \- r, L8 C: F, L  1200     0    12   202   213   222   417   418   622   6124 v) }% Q& t6 k) d" t
      1212    12     0   214   201   211   406   406   610   6004 [  i" ?, ~7 |. [
      1402   202   214     0    30    20   215   220   424   414- F1 D2 f" @& g+ a
      1413   213   201    30     0    10   205   205   409   399. \$ m) J1 z+ R
      1422   222   211    20    10     0   195   200   404   394
    ' W1 p/ F4 Z# s$ O  1617   417   406   215   205   195     0     5   209   199
    - j( B+ A) t" e" [; b2 K/ j  1618   418   406   220   205   200     5     0   204   194( ^: k3 u2 f0 g- T# ~8 B, o
      1822   622   610   424   409   404   209   204     0    108 _$ x" U2 e+ _4 j5 B% u
      1812   612   600   414   399   394   199   194    10     0
    9 _4 H: {- V1 b7 R$ G/ F7 A5 W6 {+ N/ u( s' p& k
    R =- \- ]1 e+ {5 j4 O! o) y
       1   2   2   2   2   2   2   2   2   2
    $ O- ~& }: F' H; [- r' K4 }. t   1   2   3   4   3   4   4   3   3   3; F! g& N4 r/ y7 O0 q
       2   2   3   2   5   5   5   5   5   5
    . S5 O$ r1 T5 k. c( _! R, F( O   2   2   2   4   6   6   6   6   6   6
    6 q/ C6 D* ]0 E4 ]9 r9 t   3   3   3   6   5   6   6   8   8   8% F1 ]+ J6 D3 y% J! K( I. a
       4   4   5   4   5   6   7   7   7   7
    6 H/ Y7 s  q8 N% k5 ]0 J   6   6   6   6   6   6   7   8   8   8
    " b9 K% U7 e# {; E   5   5   5   7   5   7   7   8  10  10& {4 D3 ~, ^. w% M2 r
      10  10  10  10  10  10  10  10   9  10
    : t2 l6 c0 V' ?+ ~   8   8   8   8   8   8   8   8   9  106 p3 \, C  }2 G) K0 j
    结果分析:
    3 S% V2 |* l0 F) L, |' j* \通过运行结果:可看出,
    9 j; l+ q: |! o" ` 到 (即 到 )的最短距离为1812(km);
    * Z- x3 L( h0 ]  V+ _! ] 到 的最短路径为:V1→V2→V3→V5→V8→V10;: L: l8 c) B2 T/ h( B3 H" s
    到 (即 到 )的最短距离为1618(km);
    , b3 A( }+ l# Q% o, f3 Y/ ~; n 到 的最短路径为:V1→V2→V3→V5→V8。
      D1 f& f8 |. a! y$ s
    2 \  W3 ?' ]- \$ E: m# l) `  C+ s! I4 a. [
    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-4-19 20:55 , Processed in 0.438334 second(s), 55 queries .

    回顶部