QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    , R8 G9 b2 W) b/ s2 }9 C一.实验目的:
    5 v3 Q: s/ x! C' _) F% s! a. J1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    ( W: [  Z& N/ C1 a6 g1 k2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    8 g. Z; S' h: f+ v0 k3 N9 Y$ I二.实验内容:2 T8 R" F$ `9 [. L+ L
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).9 a: E  I8 h9 Q  T
    为方便计,1km主管道钢管称为1单位钢管.
    - b$ p1 o. U' L+ t8 v- }# y一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
    - m9 q" P- I7 V# @) o* h 3 V( r$ r: K. u& d0 s3 N  u$ j- r) ]
    1        2        3        4        5        6        78 e9 e* z" b2 s1 C9 h# b4 d

    # e, ~- m- b0 L; y% y3 e; v800        800        1000        2000        2000        2000        3000
    3 s* T' u6 a' C/ m" E
    : y  \3 q# R4 t& ]0 {/ ]  c0 f160        155        155        160        155        150        160" \; L* Q) P( d9 s+ B; `
    6 ~% n9 [3 S$ I
    1单位钢管的铁路运价如下表:
    1 M/ O/ _$ ]! |$ T里程(km)          300
    4 k7 C& ]' ^  r5 u! w' _301-350        351-400        401-450        451-500, s/ f5 M0 t- U2 I2 S9 n# q4 H' e
    运价(万元)        20          23          26          29          32
    # W9 w4 E1 |3 R, z$ r& E+ v里程(km)        501-600        601-700        701-800        801-900        901-1000
    8 |7 b6 O. k& l运价(万元)          37          44          50          55          602 E+ `5 l$ T3 J- x' l! q& y
    1000km以上每增加1至100km运价增加5万元.; J- x3 O: Y: u# @& s
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).- w# l+ o' E) h$ f5 J) k: X. i
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    ( m) o5 O/ b. l4 T) u1 D3 a , r4 h* p. ?- ]5 }* b& {* ^
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    ) n& O2 D- I5 m) {. U三. 模型建立! e5 C7 Y1 V1 q; t3 [- Q) Z
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    ( S0 V7 s. i+ H6 H6 D& R* E
    # R; T4 l  L" J$ z# `利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    2 J; `- I! i" I4 W$ p; ]* ^ + I% j7 r1 K. w; `6 F
    解:先写出带权邻接矩阵:
    % f' [, E$ Z5 G+ o  }  ?4 n5 f
    & F& ?& O2 D. l! O& n后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .7 Y; |& w5 H" P/ T0 N
    四. 模型求解(含经调试后正确的源程序)0 [+ S; L% g: x$ E3 P
    (1) Dijkstra算法
    . `2 R0 H% O% m# D! K$ }( [road1.m文件源程序:9 K  Z0 B$ p; X1 j; u# C( j
    w=[0 1200 inf inf inf inf inf inf inf inf;; [# Q' I: u# N1 g. p! T
    1200 0 12 202 inf inf inf inf inf inf;8 K7 C# Q, U: V6 D# n0 F
    inf 12 0 inf 201 inf inf inf inf inf;6 q6 E) q6 j& j& ]" p: D2 J- Z
    inf 202 inf 0 31 20 inf inf inf inf;2 }- u7 F4 c6 t+ l2 n& b
    inf inf 201 31 0 10 inf 205 inf inf;7 t  t2 ^3 A4 u4 r/ {
    inf inf inf 20 10 0 195 inf inf inf;4 G7 E" ~4 ~/ ]7 \1 n0 |
    inf inf inf inf inf 195 0 5 306 inf;) b; t: P( g3 K! D# o4 L) ?4 e
    inf inf inf inf 205 inf 5 0 inf 194;  d2 j9 f; p& N% q4 `
    inf inf inf inf inf inf 306 inf 0 10;
    7 |' g! m8 a: N1 Q6 C4 U0 Vinf inf inf inf inf inf inf 194 10 0]; , k, W4 x- }8 M9 [' h- U
    n=size(w,1);8 p7 b6 m2 h7 `' O* E
    w1=w(1,;
    # m8 R" s3 p2 b4 E  Xfor i=1:n
    ' U: @: V+ r% O- \5 l    l(i)=w1(i);6 x' c& o! H( g* l; A3 m/ [
        z(i)=1;) u4 L4 Z" U9 G" m7 U5 ]- M' [
    end
    ( `& E1 R! r1 X# r- Ns=[];9 J. d" t6 P# ?0 T% I
    s(1)=1;
    ! A8 B* Y0 U$ C: ~u=s(1);
    4 {9 r+ A/ P+ [6 kk=1;8 n1 k; g" ^. N3 b
    l;
    7 y# J' E: ]' n: f* s$ Mz;
    0 \6 c5 i( y( [; d. ?7 w3 h- Gwhile k<n6 X" X6 c. v) C5 @* ^
        for i=1:n
    # H: T2 @3 H0 c% S) Y: ]    for j=1:k
    9 T5 \. b+ i# n1 s9 i: O       if i~=s(j); h- ?! A# k+ [# L: V
              if l(i)>l(u)+w(u,i);, z! t; G+ F# _6 I
                 l(i)=l(u)+w(u,i);
    ; [' ^" n5 w" V             z(i)=u;
    2 i/ @+ y0 a/ @  I) z( f/ z( a         end
    5 g5 |" Z& k6 G% P9 @: C! I     end0 @0 m  `$ U, D! I2 T- e: ^3 t
    end: h4 t9 S) x3 g# T8 i. t% K8 p
    end
      B" p/ F7 j3 e% Z( E* k l;
      B, _! |% O% d7 \- m z;
    " N4 n! B4 u0 x8 l$ d5 Qll=l;( K0 z. e( }1 H% n7 e$ \$ p
    for i=1:n
    ' ^" f! ^% J9 f: W2 d/ @ for j=1:k
    ; h0 f+ i' i! \: p7 i    if i~=s(j)
    ) z$ m' v9 |; x7 s       ll(i)=ll(i);# w$ ]7 p" ~* B7 L: n
       else7 A2 y5 D  Y9 O: q8 L# K
           ll(i)=inf;/ S3 q( J8 [& \7 c0 |
       end
    2 M$ t& \( t8 dend
    $ o3 E; s3 l/ A: Iend4 L: p7 T$ _% k0 X2 `; \* |% `
    lv=inf;" Q. }0 a" L: ^/ j
    for i=1:n
    : V# e0 T0 _; Z    if ll(i)<lv
      A7 o* p5 z) p2 R, x& ~1 h* @+ ]5 W& h       lv=ll(i);( f# K$ K# Q$ C, {8 V
           v=i;9 ?2 ]* z1 q; m* [" d/ |. d
       end
    2 [3 e$ W) Q9 A0 x9 ^( g4 Send% i0 _/ W+ N3 G+ ?2 X
    lv;+ T( ]; ~0 Z$ `% [
    v;- a6 }1 D7 o2 v' @
    s(k+1)=v;3 x+ ?( }# J  t# `! e. B
    k=k+1;
    3 x3 w9 V* `  y! J# I0 \u=s(k);
    5 \. D- ^* E4 j4 A: Uend
    7 R4 L6 U4 P7 }% v% {l  D# w0 F. ^3 F& R
    z
    $ E& e# t. F5 b1 R1 x6 W8 [! V% f2 p
    (2) Floyd算法/ M% t9 U* ^- J0 {! f
    road2.m文件源程序:
    7 M7 g; u& _( }6 x) S7 Ea=[0 1200 inf inf inf inf inf inf inf inf;" d* [4 O( o/ }: j- j
    1200 0 12 202 inf inf inf inf inf inf;
    & w) R. C8 c) Z) {6 W7 Cinf 12 0 inf 201 inf inf inf inf inf;
    ) m# c0 u1 [  ^. ~  M9 uinf 202 inf 0 31 20 inf inf inf inf;& _& w7 {. b( c* e% R3 M
    inf inf 201 31 0 10 inf 205 inf inf;
    4 F0 E7 t3 W4 k9 y' Winf inf inf 20 10 0 195 inf inf inf;; U6 R( E# _5 o
    inf inf inf inf inf 195 0 5 306 inf;. P7 r, \( m( v# n
    inf inf inf inf 205 inf 5 0 inf 194;2 |: B4 J: e. h1 K' I! P
    inf inf inf inf inf inf 306 inf 0 10;
    ! {7 p' X/ O& [7 l/ g1 h! j. yinf inf inf inf inf inf inf 194 10 0];" I1 C: P" u' P0 Z* D
    [D,R]=floyd(a)& V: t; F- d  z5 @0 I1 R
    floyd.m文件源程序:
    8 G$ ~0 K+ y9 Zfunction[D,R]=floyd(a)
    6 ]" y4 h4 H% t- v* d7 y  ~n=size(a,1);" m2 e! h4 G' W% a
    D=a4 t+ a2 Z6 {$ b2 n& V
    for i=1:n4 r7 P, K& W+ `) a. J: G, v2 [2 n
        for j=1:n
    " s0 G) q: c9 b, Z0 C        R(i,j)=j;
    4 V7 ~. \2 S1 K+ ^5 t" G    end# B7 I0 S$ b7 l2 H
    end" Y/ q# p5 _: A, s4 V
    R
    . X! Y4 z6 k7 _" Dfor k=1:n2 l. n: _) T) Q6 L. q  G: c% m
        for i=1:n
    ; v- M6 s, G4 F  P# b        for j=1:n3 ?2 M! e9 h- n6 M
                if D(i,k)+D(k,j)<D(i,j)
    $ a# C  G1 P! T5 @  w% c3 L1 G/ ]) C0 z9 v               D(i,j)=D(i,k)+D(k,j);
    9 w5 g. \, `3 q) M               R(i,j)=R(i,k);
    9 o7 E: k( W4 Y* H* S& j' i           end
    $ j4 I# q1 K. y1 l8 c; d       end0 S/ E6 }0 c, h+ h3 f
       end; J9 P- X; r9 ^- C; T
       k2 {- @' r/ P& N( V# ^5 ^% T" q
       D
    ; B* @& O, r& G   R) `( H& ?4 S1 c2 j9 l
    end, S' z6 c6 Y! U
    五.结果分析
    8 v5 C! K, y/ S& X5 Z: t(1)Dijkstra算法
    2 y, {5 X+ Y. y9 ~/ ~2 {$ l* [" k运行结果:; V% ]/ z5 q. u! c. a
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    ; d; v& E  J6 ~/ V! w1 v" o$ l4 wz =1     1     2       2     3       4     6      5      10      8
    3 R3 B4 I& |6 g$ X3 W5 l! U
    , J# h; m) ~7 R( h; x* w3 z8 |结果分析:( h# o4 u7 v! x
    通过运行结果: 到其他顶点的最短路的权 ,可看出,2 F; @0 F) U( N3 O  B$ u
    到 (即 到 )的最短距离为1812(km);
    ) {' \- J% J# y" k5 h 到 (即 到 )的最短距离为1618(km);. O' s% \0 |: S' O  G

    7 B' u1 E( _8 c# g+ S8 O# W 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    2 J' L$ @* |1 c$ W( ? 到 的最短路径为:V1→V2→V3→V5→V8。/ |. o+ Z) B' s* [; y! k8 a

    & }2 ?6 V  v' i2 ~(2) Floyd算法3 @3 o: |* v! e8 Y
    运行结果:
    ) F# W$ k& ]- e; xD =
    + z$ r. P' }& l. m6 p     0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    - g6 Y1 e! w' S2 F3 }# f  1200     0    12   202   213   222   417   418   622   612( S* k: q8 I0 ~, y8 ]1 h
      1212    12     0   214   201   211   406   406   610   600" I% t6 R! {5 e# @9 e0 A
      1402   202   214     0    30    20   215   220   424   414/ ]7 B* V! ^! y+ A# ~
      1413   213   201    30     0    10   205   205   409   399; H( R; u8 q; L2 ~8 d8 q; }
      1422   222   211    20    10     0   195   200   404   394
    . E  Z1 e1 Q% g+ i7 k! j  1617   417   406   215   205   195     0     5   209   199
    8 b# V# S2 K- t9 w2 ^5 x  1618   418   406   220   205   200     5     0   204   194+ A; k9 c6 c; V$ l
      1822   622   610   424   409   404   209   204     0    10
    , p/ h" t+ @. p4 [  1812   612   600   414   399   394   199   194    10     0
    6 C1 N% W  C2 M  v9 u3 t! `
    " k; \2 X* o" e$ H% _1 a% dR =
    ) P8 {3 N* S+ k" P   1   2   2   2   2   2   2   2   2   26 s+ z, \6 X) _8 q- V& `: ]+ N
       1   2   3   4   3   4   4   3   3   3: f$ ^. m) J& b
       2   2   3   2   5   5   5   5   5   5
    ) @4 w6 M; t6 G   2   2   2   4   6   6   6   6   6   6
    5 d1 i+ I* Q6 e+ C+ v" f3 ?9 y   3   3   3   6   5   6   6   8   8   8' M4 {- d9 c& V- m# m( s- V
       4   4   5   4   5   6   7   7   7   75 U; _- _4 h% c# M& F6 v
       6   6   6   6   6   6   7   8   8   8
    5 x& D$ E; f9 r' {% ?3 [6 y2 t9 v   5   5   5   7   5   7   7   8  10  10
    / z- W; e: N4 p  V3 D1 ~  10  10  10  10  10  10  10  10   9  102 a' t$ W+ u2 c
       8   8   8   8   8   8   8   8   9  10% ^0 d( I) u" G6 J8 I
    结果分析:+ J6 B: N( q2 s
    通过运行结果:可看出,
    7 `  L* a+ N$ ?' h. y 到 (即 到 )的最短距离为1812(km);
    6 {! a" z+ C% z# t, S 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    + _2 g/ X9 ?- R  A 到 (即 到 )的最短距离为1618(km);  K: S, u. r& i! b
    到 的最短路径为:V1→V2→V3→V5→V8。( d# U& x% A. r

    ( f( a2 X- M, a( X# h8 r% `5 q4 i. ^
    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-17 12:11 , Processed in 0.452219 second(s), 55 queries .

    回顶部