QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法) m' T" N( ]9 ]! N3 A1 a, L
    一.实验目的:
    0 [' ^( {! B8 ^5 v' c% E1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;% n+ b  m7 e0 n+ ^5 |7 \
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    ( }; E4 t; |, P# a4 t二.实验内容:0 L+ @1 F% i1 {2 F4 |
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).. p1 }5 ]7 E8 K' H
    为方便计,1km主管道钢管称为1单位钢管.
    + L7 l' J  ~3 j: T9 P% `1 B0 |一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:0 x. q1 A+ t3 ^# h- l

    4 ~4 I5 n7 `( Q0 z  b1        2        3        4        5        6        7
    7 j; O( k2 r7 Q& `5 O$ Y: F6 b+ n ; Z4 ~& b& }1 x! R+ O
    800        800        1000        2000        2000        2000        3000
    # r: N5 [( A$ X8 q* W5 Z- R : F* B% z% G+ J; u2 x9 s
    160        155        155        160        155        150        160
    . t" l' k+ l  R! L' n- a) d5 U' `0 H; O
    1单位钢管的铁路运价如下表:
    , ?! a) X; [% M2 ^. R  I  y里程(km)          300
    * P1 l; t9 l, w/ J- g301-350        351-400        401-450        451-500' S! Z/ }4 {+ Q9 c/ c
    运价(万元)        20          23          26          29          32
    0 s4 ?" {7 w2 _' f* O% _里程(km)        501-600        601-700        701-800        801-900        901-10000 R& F- Z) |+ R) G/ T6 l5 R" R
    运价(万元)          37          44          50          55          60
    # f  u4 G/ V! }; |: u1 B1000km以上每增加1至100km运价增加5万元.
    $ j9 T8 O6 c: U6 [3 ]( a5 R公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    1 j# G, o2 F/ R, E6 ?) Z. K4 L1 L假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.& U9 _( O1 E5 H2 F) S! O1 d
    . N) W4 n9 U! W
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.4 P+ q6 R, H% ]  Q" \, p) v* k3 [
    三. 模型建立7 p5 ~; f# T( w
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :9 Z0 ^' w" M- v# ^5 Y8 m4 f) X

    ; y8 x/ L9 |& A" F利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离- N9 z6 _2 `* e8 z* C2 v# G

    ) L; m3 A  q. z; e解:先写出带权邻接矩阵:" c0 U3 R2 U: @+ P; ]7 l6 R8 d8 c* P

    : |, X9 H& U3 f后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    ( [8 _3 s8 f/ k9 {" t8 d' ^/ k& k4 j四. 模型求解(含经调试后正确的源程序)# w9 p( }- h2 F2 F
    (1) Dijkstra算法% @2 e( T0 Q4 S, S8 Y
    road1.m文件源程序:
    ( a; @9 [5 U1 z+ Y3 }w=[0 1200 inf inf inf inf inf inf inf inf;8 }9 b8 H; G5 J* S* \/ O
    1200 0 12 202 inf inf inf inf inf inf;- d: D9 Q! J5 N0 o& n( y' W
    inf 12 0 inf 201 inf inf inf inf inf;
    ( o1 e& {! c) p2 W2 einf 202 inf 0 31 20 inf inf inf inf;" l# N) u+ b" ^# [! Z
    inf inf 201 31 0 10 inf 205 inf inf;+ c5 T- B. l  ^, u
    inf inf inf 20 10 0 195 inf inf inf;% _2 J# K" @# {
    inf inf inf inf inf 195 0 5 306 inf;: @0 d3 I; _1 ^. }- Z3 l
    inf inf inf inf 205 inf 5 0 inf 194;! _& e: I& l) p5 g
    inf inf inf inf inf inf 306 inf 0 10;- D7 [1 \) l; f9 g* K5 u
    inf inf inf inf inf inf inf 194 10 0];
    2 X# f  x2 T7 s$ A2 @0 zn=size(w,1);: f0 ]. Q8 A9 I7 o& q
    w1=w(1,;' \4 {2 f1 |; G/ y" O0 D+ J
    for i=1:n* d4 j3 x( v$ c. I9 F
        l(i)=w1(i);
    4 |9 N. R/ n0 Q1 a! b& J& c. f& b    z(i)=1;
    % l) h& Z3 M0 E% p. ]2 iend# p9 v. H1 m9 r! [
    s=[];: z7 E6 G6 K- [  v, i/ i1 V
    s(1)=1;
    9 ]% S4 g: Q. `7 {! ?3 l! H: eu=s(1);& _4 U# m1 `6 M2 t5 L9 h
    k=1;7 {9 N9 K' v1 C& a4 R
    l;
    $ i6 x5 C$ y. z) n. iz;
    2 @; a. Z2 x. M9 B  \while k<n
    " A8 |, J9 \7 X. m    for i=1:n
    6 ^) A+ N$ @6 O, d. w7 z) l% T3 J    for j=1:k; E3 y1 L# J- N
           if i~=s(j)0 \( ?+ Z* k/ y5 ~+ |+ X) p, `3 o5 {# K
              if l(i)>l(u)+w(u,i);6 O9 x) \( \- x2 t! B4 g4 z
                 l(i)=l(u)+w(u,i);
    * h( b$ a; O  M             z(i)=u;
    7 {8 H) J4 k% l: |) d- f3 ^         end) D" i* ]6 V3 D6 {2 u
         end
    / _, k! H; Q+ Q) y* F. A, O7 N end! q7 v7 G: M# Z) s( ^  [
    end
    8 R& s6 k. I5 X0 R l;
    - @1 b  F( n, H- ^ z;
    , s$ Z2 j2 J6 h) i8 X! bll=l;  ~8 b" t& _! T) u- b
    for i=1:n
    ( L6 Z+ _! n. Q6 w* b for j=1:k2 v9 ?1 V; `8 k7 I, d" o
        if i~=s(j)
    - p9 x+ B3 \2 S9 ~" d3 b7 L       ll(i)=ll(i);
    ! \: E2 L9 r5 m! r5 N8 _   else
    : \$ q  H, N, j" K/ x. t. ~6 h2 i       ll(i)=inf;
    ) @( L) S) r4 S" g1 [) z; r+ G1 a   end6 r  T, Q8 H) N) u% o4 |
    end6 S1 E6 X  S$ |* w, k
    end: Q" W# a  y- ?- E. @" F3 r
    lv=inf;7 f$ b0 x* L1 T: _  x9 V
    for i=1:n
    / }' T' q5 t$ D6 M$ `+ D/ d    if ll(i)<lv$ V/ d# \# D3 Q4 n- R3 r0 d+ v
           lv=ll(i);
    $ m: ?4 _% Z/ O3 y       v=i;" ^; _7 d" o1 W, n7 D9 ~- D+ R4 }: i
       end! u, R/ ?0 |! L9 q4 a
    end, \3 y% e+ n; X. V5 N2 W9 V1 @9 b/ v* s
    lv;
    8 ]* y6 q: F+ N5 n3 Y9 `" Qv;
    0 s9 R; M6 w* U* l" Ks(k+1)=v;
    4 R* Y9 K. f+ ]& v4 y+ X8 r9 Ak=k+1;
    ( V2 _2 T! o8 B( E* Ju=s(k);
    / M- [) D4 l: u& j  G& V7 cend/ R* ]- r/ D: f. Q. q0 }) l7 z
    l
    1 X- `& T$ C7 x) Az$ w9 P; X% v1 Q7 A! x! {
    - o7 `( B% K7 s& B! R! {
    (2) Floyd算法2 l6 l4 s) D8 X5 b
    road2.m文件源程序:# Y$ v" @3 y1 I' ^, R
    a=[0 1200 inf inf inf inf inf inf inf inf;8 k0 x2 k- O4 ~* \( q0 ~: _& u
    1200 0 12 202 inf inf inf inf inf inf;
    ! K" U5 q& H3 j. ~: ninf 12 0 inf 201 inf inf inf inf inf;) `4 w" U7 p3 i% n5 U( J
    inf 202 inf 0 31 20 inf inf inf inf;7 B( b3 D6 K  [9 y" _4 ^1 ^
    inf inf 201 31 0 10 inf 205 inf inf;
    # j$ a; h' u( x8 O! B8 Y8 _- finf inf inf 20 10 0 195 inf inf inf;( t; }! p) B; j. U; ~
    inf inf inf inf inf 195 0 5 306 inf;2 \9 b: l  D% p$ I
    inf inf inf inf 205 inf 5 0 inf 194;, f+ k! C& R" I0 n0 J  ?% t/ ~& T
    inf inf inf inf inf inf 306 inf 0 10;, ~+ ^/ D& v2 ]- R
    inf inf inf inf inf inf inf 194 10 0];
    & x- \0 w+ ~" g2 L' u2 `[D,R]=floyd(a)% C  t! \' D! r5 g3 J
    floyd.m文件源程序:8 e- h% k7 S& ^' l1 q" A0 r" u
    function[D,R]=floyd(a)2 T( q6 E1 J% G
    n=size(a,1);$ n% G2 ~1 u" Q. V
    D=a
    4 x/ a" H3 M2 M- Ufor i=1:n1 [# H& ?* @1 \& y/ f
        for j=1:n0 [  l% \. U6 U) |
            R(i,j)=j;3 |% F" |/ S, A8 @1 v' W% N
        end2 j9 v+ Y& _: ?$ l. l
    end" p4 M. K/ Y! {  ?  q' \
    R
    9 [! p4 s# V% e; V0 E2 Yfor k=1:n; k" I- P3 H8 l/ H% k. N: s
        for i=1:n
    0 m1 ?! j: s3 A# T! O7 C8 D3 S        for j=1:n
    ( K8 P- O2 h7 }+ f2 p            if D(i,k)+D(k,j)<D(i,j)
    ' Q* M$ D& J7 n               D(i,j)=D(i,k)+D(k,j);- p3 I+ u) T7 b) z
                   R(i,j)=R(i,k);
    ! L. N$ K" ~8 U" B# K: ]  S6 }           end" }! }5 c  L& i. k1 @
           end
    6 }% A6 w$ y$ }: c3 g& L6 R. ?   end
    " L+ x) H3 g& r   k
    9 o) n9 |' X* h' `5 \; j4 f/ g! b, q   D. M6 m/ U7 n$ c9 s- S
       R
      P* c; B2 M, ^; f- i6 v3 N$ Hend
    ) C9 g0 E! _8 }& I$ q9 u五.结果分析8 L, m- c- e) f# }5 G( l; A
    (1)Dijkstra算法
    7 ?+ {- K6 g% t) l运行结果:( _0 J8 I4 t& {: q$ a
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812* V/ i9 l2 w& Z: M3 {( P# k6 C
    z =1     1     2       2     3       4     6      5      10      8
    0 k$ @" \. F- L2 S ! ~* r1 p9 c3 `6 r! k1 S; b8 \* a( k
    结果分析:
    9 l& v" T, W6 u( x2 T0 h通过运行结果: 到其他顶点的最短路的权 ,可看出,. F, ^2 W4 I; Z# [8 l' r; O
    到 (即 到 )的最短距离为1812(km);5 Y2 f3 {: a& c- h& ^8 ]
    到 (即 到 )的最短距离为1618(km);
    - k, T& l( V7 Z1 G" r+ g- G: }2 R8 O1 a# O6 C4 R( s& I
    到 的最短路径为:V1→V2→V3→V5→V8→V10;6 T$ X/ v* C4 C
    到 的最短路径为:V1→V2→V3→V5→V8。/ S* @, N, O! Z3 t; a# g& Q
    $ |0 C- Z. @4 \+ l
    (2) Floyd算法9 J& V5 k6 B: }7 r/ z
    运行结果:
    : x5 Y8 v2 @3 n; Z' _D =( y: \0 g6 W* ^1 }2 N5 q
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    $ x7 c) n) ^9 j5 ?5 f% `3 \  q6 B  1200     0    12   202   213   222   417   418   622   612
    ' O/ I; c) x+ a) l; y* x6 {. T  1212    12     0   214   201   211   406   406   610   6004 e4 q- r6 k6 }  X# p
      1402   202   214     0    30    20   215   220   424   414
    & p2 S5 ?. K  @5 Z5 ]) B4 L' b  1413   213   201    30     0    10   205   205   409   399
    - @9 `2 k" }% T7 d" n: H  1422   222   211    20    10     0   195   200   404   3942 H; C. W7 t5 D+ X  k+ G& J) U
      1617   417   406   215   205   195     0     5   209   1994 E' _- q, K+ e* `* ?. J
      1618   418   406   220   205   200     5     0   204   194
    1 v7 c$ q" u, S; H6 L) P$ F: v  1822   622   610   424   409   404   209   204     0    10
    - G: e4 |4 X2 C2 k  1812   612   600   414   399   394   199   194    10     0
    " y: F" y% n* m: g8 ~( V
    0 A7 G/ C3 L- l' ]3 E( a5 SR =
    2 l' z. b7 l" ~. ~3 ]/ |8 n, R   1   2   2   2   2   2   2   2   2   2/ t6 l# `) a9 T7 Q
       1   2   3   4   3   4   4   3   3   3! [; ^8 e$ v, b6 \
       2   2   3   2   5   5   5   5   5   5* [" q6 A* n. E' Q: _' ]3 r
       2   2   2   4   6   6   6   6   6   6) L% g$ m, j1 Z- K: |
       3   3   3   6   5   6   6   8   8   8
    - M$ A2 M; ?3 ^7 N" A- j& X, J0 D   4   4   5   4   5   6   7   7   7   7, G% \7 m# U+ @! c
       6   6   6   6   6   6   7   8   8   8) ?: ]& k3 R1 m4 {8 ]6 G
       5   5   5   7   5   7   7   8  10  100 m$ h& C7 ?  u3 T4 z' b( N
      10  10  10  10  10  10  10  10   9  10
      n- z  y( J# U6 j# `   8   8   8   8   8   8   8   8   9  10
    # e3 G  d) x! D: p. ]. B1 Q结果分析:2 l4 c1 a* O7 w! `- l5 u% z
    通过运行结果:可看出,
    8 G2 f7 k) X$ f: U 到 (即 到 )的最短距离为1812(km);$ U! z) k* ]. ^6 i; z$ Q& ]. N* @
    到 的最短路径为:V1→V2→V3→V5→V8→V10;* ]% d# k) N! `- U6 ~6 q
    到 (即 到 )的最短距离为1618(km);
    / h( [, y# m2 m7 N* B1 P 到 的最短路径为:V1→V2→V3→V5→V8。  _) \0 U5 p# L) f# m, R6 m  Q

    7 [! k) ~4 r( S/ S' p) x
    4 h  ?4 P) \6 D6 T: P0 z& S& X0 Y8 \
    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-14 16:56 , Processed in 0.443569 second(s), 54 queries .

    回顶部