QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法; G5 u, g; @% ^- D* o; y
    一.实验目的:; w$ m- b& T' w+ }) ~, b0 Z
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    & e5 V& X. S1 G/ x' p+ i2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.% i5 a: Q$ C$ C: Y/ _7 {* T" w
    二.实验内容:+ `! o3 d0 e9 Y
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    " m  u: I8 x) |6 U0 X7 n, ]为方便计,1km主管道钢管称为1单位钢管.
    6 z; w- K5 z( O) z4 u3 q, g4 Z一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:  p4 c) H* D. e  f9 O8 t
    ( `7 W* ?% @! }: j2 q0 P( c
    1        2        3        4        5        6        7
    2 {! q% a/ I+ R) U0 X/ D : R* S8 M- _/ _) ]# V6 T- x
    800        800        1000        2000        2000        2000        3000
    , u4 u' {8 ~. u1 R3 V
    ! e3 d7 x: Q5 ?% Q( |# W9 k160        155        155        160        155        150        1609 c$ ?2 W+ ?1 W4 i

    - Y! \% ?2 ^8 ^2 q1单位钢管的铁路运价如下表:0 q# Z% M" r8 O0 z! n- f
    里程(km)          300
    " k2 z. S5 c! H. r: a( p( k301-350        351-400        401-450        451-500+ K3 v, {: W  Y
    运价(万元)        20          23          26          29          329 Z, w  J9 ~8 I& n
    里程(km)        501-600        601-700        701-800        801-900        901-1000% B- Z  i2 ^- j! h9 B# W
    运价(万元)          37          44          50          55          60* y4 A2 ]5 V0 I2 |4 V* p* E9 ]$ }! x% B
    1000km以上每增加1至100km运价增加5万元.
    + n, l, r4 [4 C9 U% i6 W% A公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    % T8 @7 R$ X! e0 W假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.8 G& @8 E. E: H6 Z0 F! p' C9 M
    . |+ _& r/ d) Z& F9 ], h% Q
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.: F& l% e: i% w* x" T
    三. 模型建立. f/ j; Y2 _! Q- e% I: \% w
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :. h# v3 M! w% K# h& H5 g7 G
    , c4 J  v" w5 i
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    ; j: L) N1 r- x$ Q8 f! o + J0 b# x- y. ^/ |, R8 v% G5 A
    解:先写出带权邻接矩阵:+ b' c1 i- |8 C
    4 x! m8 y2 V  U3 i9 t
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    $ n9 {5 Z7 p' \& r四. 模型求解(含经调试后正确的源程序)- i8 ]: E' x4 \/ t; {* x% t
    (1) Dijkstra算法2 Q7 R/ h; E  I! [8 \5 e
    road1.m文件源程序:
    ( I% ]" `7 j! ~4 bw=[0 1200 inf inf inf inf inf inf inf inf;/ q( K/ d: p1 w- @/ Y. H1 }$ p
    1200 0 12 202 inf inf inf inf inf inf;
    & b, T. N( X- r! x9 l  {  Ninf 12 0 inf 201 inf inf inf inf inf;
    5 k( H8 C' ~- y0 `) _3 ~# Y5 H2 `inf 202 inf 0 31 20 inf inf inf inf;
    3 W  e0 k  {. n: z5 Uinf inf 201 31 0 10 inf 205 inf inf;4 \1 e: e% j/ D1 h+ j
    inf inf inf 20 10 0 195 inf inf inf;
    " t& T% f' `. r, R& u, |  qinf inf inf inf inf 195 0 5 306 inf;
    7 Z* M2 J. a( Y6 Z; |& iinf inf inf inf 205 inf 5 0 inf 194;8 @  M7 y" O! X& A: l/ v
    inf inf inf inf inf inf 306 inf 0 10;2 V' q+ v2 T" K8 [2 W4 K
    inf inf inf inf inf inf inf 194 10 0]; : L  E) ?5 h5 H/ o; L8 n
    n=size(w,1);* r7 u* M, v, T
    w1=w(1,;
    # F: o7 c  ^7 o" pfor i=1:n  X( [; j1 p: m  @6 S  n
        l(i)=w1(i);
      h# q& D* c9 ^# [    z(i)=1;
    5 I' G6 v: W* M( uend
    . E/ D8 e6 o6 Ls=[];7 }, `% o4 Z# `) L1 z' c4 W  W6 T
    s(1)=1;0 D* t: n2 J: N% W6 q8 Z: @4 n
    u=s(1);$ E0 y% l$ k2 C
    k=1;4 k5 U/ `& S: b* _8 c. }( i
    l;4 @8 N2 J! y0 B: C
    z;
    % ]# }7 v0 s& S, s5 xwhile k<n( c. _: a5 b$ q" E0 n' T
        for i=1:n
    # V- u: I3 f9 F6 }6 c- D9 L7 ?: `    for j=1:k$ V( G$ r4 n/ R8 U
           if i~=s(j)* I4 H7 x) |' H( g3 Z/ _8 H
              if l(i)>l(u)+w(u,i);
    # o% I, [7 ~: U& M! X6 @             l(i)=l(u)+w(u,i);
    % B2 h4 T6 z. d. ]8 A, W3 v             z(i)=u;' w1 I) J2 r4 u' t1 {
             end
    , e$ A: t$ O2 N  E# C     end: J0 w% y% R, x, A6 N/ q
    end
    & y5 J$ P1 u7 ], F7 i& xend6 Y( [$ K: \6 b0 j9 }
    l;
    5 B6 |, g" N4 J* X9 H5 u z;
    0 e. a0 ]) V" [  E2 s3 f3 x3 S( U& tll=l;
    7 }4 H0 Z9 A  i, c for i=1:n
    * t1 H4 [- p% w. R for j=1:k
    # s  D  b+ y: |( b9 w  K    if i~=s(j)4 W6 S( t+ m, b
           ll(i)=ll(i);
    * [  L1 J$ V% W7 H1 ?# A7 z   else9 V# I8 z& r. I
           ll(i)=inf;
    - m  z2 _& \9 n" |! d   end+ J9 u; Q' t- w% M8 x
    end
    * i9 Z# p0 V' c5 k" ^end
    . g) q) g2 `  _, W4 y" Dlv=inf;
    1 P1 p  o6 M$ H* rfor i=1:n% N# r% o0 D' Z( L3 Z3 p
        if ll(i)<lv. D$ C3 R9 {8 D" M" B1 {) s
           lv=ll(i);6 A- G: ]# z- z- N% U
           v=i;
    : |6 R& T" K- F. A: q% h   end3 G( K& f5 _& u+ _, F0 Y" C& Y
    end
    , @9 |3 h- b6 N, vlv;6 O  o. y" |; t6 h' m" W1 t
    v;( }. }0 P4 \; Z0 P
    s(k+1)=v;
    % V7 _" K/ X& r- R( C+ b& c' Dk=k+1;
    2 E4 s7 k7 t3 Gu=s(k);. {" f0 R% O9 k( o, A. J
    end
    ! L' I9 {' I6 t5 Z8 al
    2 w' r8 R* A# ~7 E7 p4 }$ o( }7 p* Fz
    8 u" u) W" v" d3 E6 N7 t, t2 [. K# O+ T/ U
    (2) Floyd算法* L8 F$ v# H) x3 H( Q) h  l1 G
    road2.m文件源程序:
    ) q2 y$ I8 }# E8 V- T2 M( V( |a=[0 1200 inf inf inf inf inf inf inf inf;8 h+ y% W; Z( X
    1200 0 12 202 inf inf inf inf inf inf;
    . I3 D3 g" r* \2 Sinf 12 0 inf 201 inf inf inf inf inf;3 B3 L9 I8 s! Y3 ?9 {, o- k
    inf 202 inf 0 31 20 inf inf inf inf;8 a$ Y# Y3 N- [. g
    inf inf 201 31 0 10 inf 205 inf inf;; ^5 F0 ]. e8 U4 p
    inf inf inf 20 10 0 195 inf inf inf;; E  b, R4 ~. u+ T- a* N
    inf inf inf inf inf 195 0 5 306 inf;: \5 i$ @  ^. a" r$ M2 I* N
    inf inf inf inf 205 inf 5 0 inf 194;
    " R& y4 `! z# J9 t: r2 f8 k4 binf inf inf inf inf inf 306 inf 0 10;: y) A5 \  F9 C' W
    inf inf inf inf inf inf inf 194 10 0];
    " z- }% a6 [$ m$ ?[D,R]=floyd(a)' M7 C- [2 @9 K1 Z) \  V( L0 K7 A
    floyd.m文件源程序:$ S* b$ l0 k; f: e  T  `, t
    function[D,R]=floyd(a); J- |. V  r# s; \
    n=size(a,1);
    ; w0 \& S6 |9 R* I. |D=a
    ) s2 z7 w+ E: I7 W4 m: @* q8 x5 xfor i=1:n* b/ `$ I, _. D% v# p3 r
        for j=1:n
      q! w4 e2 D0 ^( a        R(i,j)=j;
    - k* ~/ E  Z* ~- a; ^. i    end
    " G" E/ w8 P, C/ I3 ]+ Send
    ( N2 l  m) z# {' E, _0 zR" l) u3 E1 `( ~/ y+ s4 r0 ^
    for k=1:n
    . _& f. Y8 S8 K    for i=1:n# {8 i' Z; I' j, I4 k) r. `' X5 E
            for j=1:n$ y8 g6 X& a% H9 U
                if D(i,k)+D(k,j)<D(i,j)
    " O9 T, S  M) ~, T1 @               D(i,j)=D(i,k)+D(k,j);
    ! @( J  Z& b- H8 j               R(i,j)=R(i,k);. n- g$ y2 i' W' h/ U+ G
               end
    " a3 b: [4 g; ~       end. T+ @# [. ^# `0 r
       end
    " |6 ?4 d" C* B; b   k
    + L4 x. o" S1 Y( k- o0 ?( k   D: |6 l$ _" C6 Q( D7 o' N  W3 o
       R' \5 s8 X3 W* w0 X8 E1 m& p/ D% S
    end
    : C" d. o. I9 t: I9 A五.结果分析
    ! ^7 p* {. |5 U& l, r1 A(1)Dijkstra算法: {. [5 g4 K1 K3 X
    运行结果:% n" a4 f$ x9 `) m9 H
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   18125 w/ O0 X. M8 h3 ]# r
    z =1     1     2       2     3       4     6      5      10      8
    / j# n' F1 N4 n3 N7 v' P
    , _/ A% M- \# O, h- j结果分析:
    . L' w( y' T/ ]1 h通过运行结果: 到其他顶点的最短路的权 ,可看出,4 M) a2 o# F) A: S* e) t
    到 (即 到 )的最短距离为1812(km);
    + f9 u5 i5 ~: m$ O! S8 F 到 (即 到 )的最短距离为1618(km);
    9 v2 k5 X: Y6 x" H1 w3 ~$ \! G3 X4 _) d( ?! ]2 p
    到 的最短路径为:V1→V2→V3→V5→V8→V10;- T. n& R0 R* ?& [
    到 的最短路径为:V1→V2→V3→V5→V8。
    + u) i  P( b- ~1 ^" H
    6 ~, g+ _- `0 {( w4 ?: z(2) Floyd算法
    7 Q& ?2 x2 G' G7 `. j4 p运行结果:
    ! K4 ]3 @, j5 R; [6 ^0 v- ED =# \9 q2 e( v. b$ N! d9 ^
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    $ A- |# N" |. o1 M8 X/ V8 d  1200     0    12   202   213   222   417   418   622   6127 G1 `" [) K& f4 b6 @6 U- P
      1212    12     0   214   201   211   406   406   610   6008 E. A; N# u/ ?3 M/ H6 s' a
      1402   202   214     0    30    20   215   220   424   414
    $ h) m1 L0 K. d0 `1 I  1413   213   201    30     0    10   205   205   409   3996 S+ O- ~+ |# q9 J
      1422   222   211    20    10     0   195   200   404   394
    4 N0 A" K+ ]& D4 ~  e- }5 [) d  1617   417   406   215   205   195     0     5   209   199# M) A8 }& p9 r# \& D
      1618   418   406   220   205   200     5     0   204   1941 D" ]2 T2 a5 V% b
      1822   622   610   424   409   404   209   204     0    10, c/ {2 u9 D7 [: i/ s
      1812   612   600   414   399   394   199   194    10     0( W3 z- b8 l  W6 {. e# Y/ {, ~
    ! a/ L1 P$ ^0 K+ O+ m
    R =8 B! `& ?. x* |8 [2 X4 x1 ~# r3 Y
       1   2   2   2   2   2   2   2   2   2
    ( e' T. x9 r- w! e1 W# B. |% L   1   2   3   4   3   4   4   3   3   37 Y# S, U. R4 L; g$ q8 |) R0 Y8 j! T9 G
       2   2   3   2   5   5   5   5   5   59 I: D2 y9 g% T5 ?
       2   2   2   4   6   6   6   6   6   6
    * s* y) _4 D+ V, T   3   3   3   6   5   6   6   8   8   8
    / q+ L9 j1 c+ N  i  [* p+ F1 k   4   4   5   4   5   6   7   7   7   7% _- N- Q  I) H8 w- b; E2 o- d" y
       6   6   6   6   6   6   7   8   8   8$ W1 l1 |& G$ r
       5   5   5   7   5   7   7   8  10  10% B2 v3 Y4 I  X! P
      10  10  10  10  10  10  10  10   9  10. H% _/ T+ q. J/ L
       8   8   8   8   8   8   8   8   9  10
    / N# q5 Q/ p) K  j  ]. d3 y结果分析:
    ) y( q, o" c4 s0 t通过运行结果:可看出,- Z. l6 R; i- y0 g
    到 (即 到 )的最短距离为1812(km);
    & A9 q5 G8 f+ N- W$ Y, w 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    - |. c: U' P* k7 e! Y 到 (即 到 )的最短距离为1618(km);* _7 T/ B4 S5 h) r
    到 的最短路径为:V1→V2→V3→V5→V8。
    5 r# _) I# ?7 K# J" a' n
    ' |  g3 d. h4 ]9 |: k: y
    % V( J; Y" `9 u8 g% g6 A3 I. T+ W
    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 02:16 , Processed in 0.383008 second(s), 55 queries .

    回顶部