QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法0 C: W% J1 L4 S* D
    一.实验目的:
    , t6 {2 |2 O" ]3 k* O  u1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;; h" O  H* G$ h+ x5 M+ t7 }
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    9 `7 A" p; w% X, H3 d二.实验内容:
    ! ~) }! G8 Y4 V" i  Z要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    7 d: ?' \" d1 y0 f. R( N为方便计,1km主管道钢管称为1单位钢管.
    2 g+ h, Z, B2 P& U1 l一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
    0 K1 d4 P0 \6 p5 l' e. a ' x8 x! s$ p8 g  N1 e
    1        2        3        4        5        6        7
    & R7 q" p- }* a" ^& i" Z7 w % T$ d$ Y" P2 t: w9 Z4 n$ K, c
    800        800        1000        2000        2000        2000        3000
    1 t# S  b5 V5 O 6 a( S0 s, p: e0 j( P
    160        155        155        160        155        150        160
    5 T7 B  u2 K- y7 p/ D9 g5 {0 H" {7 l; T0 H' ~
    1单位钢管的铁路运价如下表:
    4 }3 Q9 p2 ^5 |* Z' A( S里程(km)          3007 s5 r8 d% U! U" x( A6 g; i3 `' p% l
    301-350        351-400        401-450        451-500
    7 b- U' r! D  M4 U! @* }) {运价(万元)        20          23          26          29          321 w4 b; x% D, e/ W7 a9 M  s
    里程(km)        501-600        601-700        701-800        801-900        901-1000% n& z) {/ u! v1 k
    运价(万元)          37          44          50          55          60. l/ ]/ S% L" r' `  I
    1000km以上每增加1至100km运价增加5万元.
    / H- d, R  m0 X  Q$ K$ M- h* q7 E公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    . t) B' u' Q2 }6 n6 f$ B( ~+ V假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    ; h' \7 o5 K2 V4 x- Q+ Z. n
    ; c* Q8 d# x) U- ^1 L% {% M6 B试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    + o; a+ I# n& u$ |% K9 B" k三. 模型建立: p8 ~$ q" ^: y4 j
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :! c5 X- N* {5 Y5 d; f! Y$ |
    - D6 N+ p- R- |8 {" N, K
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    - ]3 f  \; S; [7 D/ E' [( ^9 |   v% g! h. X1 \. w6 Q
    解:先写出带权邻接矩阵:
    + C) e: S/ g  e
    # Z9 l  }2 G7 V( y) \0 {后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    - ?  v! Q) L6 o. m# i4 z3 ~四. 模型求解(含经调试后正确的源程序)7 E1 ]; n) ]3 ~/ P) i/ Q
    (1) Dijkstra算法7 [( e. r% C% G3 P8 U; k
    road1.m文件源程序:
    ( \1 A+ z0 k+ rw=[0 1200 inf inf inf inf inf inf inf inf;
    : V9 {+ M3 W. i  A0 J/ V8 R1200 0 12 202 inf inf inf inf inf inf;
    ' w- X6 l3 L$ F3 N$ Jinf 12 0 inf 201 inf inf inf inf inf;
    3 O% N7 Z/ B( E' Ainf 202 inf 0 31 20 inf inf inf inf;  m7 D3 ]& x: w1 l
    inf inf 201 31 0 10 inf 205 inf inf;
    - h) \6 w" S- {7 ^" m8 B+ ~inf inf inf 20 10 0 195 inf inf inf;) W- w* A& ]1 H2 c4 `  o! S6 {* Z5 m
    inf inf inf inf inf 195 0 5 306 inf;
    8 O. G+ {) s5 r; d1 einf inf inf inf 205 inf 5 0 inf 194;1 O7 T. W! Y  c9 X4 F4 U' U
    inf inf inf inf inf inf 306 inf 0 10;, v0 B- U7 }+ q4 U. h) z
    inf inf inf inf inf inf inf 194 10 0];
    2 \% T& R- P# `5 N7 X* ?n=size(w,1);
    % U. W% G  P6 g0 p2 p- {7 {/ @w1=w(1,;
      J, F* E7 v1 C3 @& r/ f8 sfor i=1:n: x0 _" K( X' H  m2 d" w
        l(i)=w1(i);
    & P- ?/ V0 U  \) p: b0 |1 ?6 D; N    z(i)=1;$ O  }+ i1 I8 h! H& ]
    end
    ' Q. \7 A8 ]9 U9 j. @- e( @s=[];- S+ O* S' |: C/ x( W  A; i9 K& Y
    s(1)=1;0 t0 D% f$ q; e9 M; g
    u=s(1);, v8 O. i$ U' P, @& q. p  Y* |# `0 C
    k=1;
    & {) _' ?  E/ e- @3 zl;
    9 z) w$ z' Q4 U/ \8 fz;! f: _& k4 u$ `2 o* C  W
    while k<n! ?& ], e! r5 ?( e0 I0 J: \5 C+ ?
        for i=1:n4 G: D3 V0 S8 g$ H4 w5 {+ r
        for j=1:k
    7 C# o+ P# K+ A, a       if i~=s(j)8 E" b+ @+ k0 ]! F  Y) y9 w
              if l(i)>l(u)+w(u,i);
    8 G, |& [: g6 o. z! ?7 Q' N             l(i)=l(u)+w(u,i);
    8 b" s0 u- ], @. Y+ r, S4 i- \' l             z(i)=u;6 S6 u# F2 v9 Z4 F
             end
    ! A' }; ]+ K* w2 b# N  L9 F" T" |     end
    # k: ~( \' g+ A( q end
    9 p: n8 G, \% z/ c& send' r+ u8 t9 G$ A% d" B' \- L$ }
    l;  |# K1 u- U% T
    z;3 `0 |4 }3 P0 s- A* R+ H
    ll=l;
    & Z* E" }! W; `. p4 l for i=1:n
    0 P( _! j7 s' J for j=1:k* g/ {. M. d  e% ^  g7 e, |/ D
        if i~=s(j): ?; P% j  m2 i) c$ u
           ll(i)=ll(i);1 w# l  L2 w  b
       else! n2 E5 m" ?) f; K$ ?
           ll(i)=inf;, ~* J8 _" c* U
       end% b, E0 E- F1 l8 D
    end* l( X4 G# i# [5 Y
    end
    9 {( z0 _' x$ y2 p, G+ Ilv=inf;
    1 y( A4 H( {, R% _; w. Hfor i=1:n3 E5 t$ F1 M- W! G, _1 f
        if ll(i)<lv" Q: N& i1 ]0 Z) J
           lv=ll(i);
    * Y- l' u9 ]" @8 d       v=i;7 N8 @8 L" T% _+ e+ x& h2 x
       end4 }! V3 y  O, Z, @0 K0 y
    end
    + V0 w5 p" T& _8 }) Alv;
    * h& m# R* j  k- D( F) f+ p: V  C+ wv;! r! R9 {  q5 W) u: i- F6 e
    s(k+1)=v;
    7 H0 C. l0 h) Y7 L* dk=k+1;, n) g6 E9 W! G( y2 p- m
    u=s(k);
    0 ~) i: R( J& l. _$ Y6 y! rend1 h5 l& m3 r, Q7 p( }# n$ F, U
    l) I0 c2 G/ r0 z) `
    z
    * P; C6 {/ d" n+ r9 H' Q# k/ c. \! B/ p
    (2) Floyd算法
    . U4 b; D" x! n4 ~# k* Vroad2.m文件源程序:
    - j( y" @9 p1 ga=[0 1200 inf inf inf inf inf inf inf inf;) {: D8 W7 J4 N" g3 s
    1200 0 12 202 inf inf inf inf inf inf;
    5 s6 i$ X( p6 E3 R6 G* g- f# j; Y% }inf 12 0 inf 201 inf inf inf inf inf;
    3 ?- j+ N* c, c8 B7 Finf 202 inf 0 31 20 inf inf inf inf;
    ; _; ^, @8 A' Linf inf 201 31 0 10 inf 205 inf inf;/ a" S: S; u6 [! }# }
    inf inf inf 20 10 0 195 inf inf inf;6 _+ I' @9 l' m8 I: V
    inf inf inf inf inf 195 0 5 306 inf;) z  ~* J! b3 r' w: j7 |# c' }- u/ K
    inf inf inf inf 205 inf 5 0 inf 194;: q* ]1 m' X* I* [; s" U
    inf inf inf inf inf inf 306 inf 0 10;
    7 e- j9 `6 }6 m9 N9 N7 D4 xinf inf inf inf inf inf inf 194 10 0];& o8 Y2 l; p% i- I- |
    [D,R]=floyd(a)
    , y' G3 B0 a2 ?* h( C7 L' b* ]floyd.m文件源程序:
    4 I0 R* d" c5 r  U3 dfunction[D,R]=floyd(a)
    . c; U% |2 f5 Qn=size(a,1);
    + b) c' ]3 }) w$ d6 z7 o' vD=a
    : H. r. R1 a9 p3 o2 [for i=1:n
    7 l  k9 X& A( A1 N0 l, V    for j=1:n  E! X: l8 O" s0 @
            R(i,j)=j;' y0 a, J/ J& O. F
        end5 |  H* a( ?2 J1 V& S' Q
    end
    ; b4 V& z7 I7 [+ dR
    , w4 {! t3 i" Pfor k=1:n
    8 ]# Y3 ^; Y2 B1 S8 Q6 r    for i=1:n) X$ `8 X# Z9 r0 O3 ?- A- {4 W# ]
            for j=1:n* r* F" f4 V& {5 L: L( o
                if D(i,k)+D(k,j)<D(i,j). F* R1 w! i1 `) p# h
                   D(i,j)=D(i,k)+D(k,j);5 q3 U$ R2 A2 o) ~8 f
                   R(i,j)=R(i,k);
    - A' X2 |# n  t8 S! q           end
    2 [) a- e1 M( P       end
    9 A% T9 ]" Y' u! ^- y, \1 i, j9 s   end
    2 \& x. ]# r$ P- R- v' x% f5 k   k
    9 Z0 r8 w% e. a, @   D
    . A8 z  _* r% ?6 J! N! t   R
      i8 _) a" [) u) l/ B, g/ W/ bend
    8 _' X# q# m& V* L7 F五.结果分析* t4 r+ Y7 w- G  ?8 W& z
    (1)Dijkstra算法" z/ }  P2 g! T. i# G: q6 r
    运行结果:+ G! R4 X; ~* m5 s
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   18126 q' `: i; D3 A3 K/ q
    z =1     1     2       2     3       4     6      5      10      84 U6 b/ k0 f/ ~' E4 H: V
    9 T. K. O8 y* v+ D: j
    结果分析:) Y8 j" \8 R, r( T) ]
    通过运行结果: 到其他顶点的最短路的权 ,可看出,
    ) e" I' y& t' w/ T* a6 ]; J 到 (即 到 )的最短距离为1812(km);
    ! v& J5 ^3 v8 z! [- I# O) { 到 (即 到 )的最短距离为1618(km);; x* O2 R4 G- q/ \
    9 C* c$ y7 o6 g
    到 的最短路径为:V1→V2→V3→V5→V8→V10;% M( F2 @; P, L# C# z3 ^
    到 的最短路径为:V1→V2→V3→V5→V8。
    + h4 O* ?+ |9 y. h7 F/ J8 B9 Z9 [7 ^$ D+ R( b) y& [) A9 ?
    (2) Floyd算法
    ! a1 i. I, `7 {3 ]4 A运行结果:4 k2 ]. F2 M1 k6 U
    D =3 G7 C. c" v6 U. b5 t. M
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812+ r9 b0 W" t! ?8 j( y
      1200     0    12   202   213   222   417   418   622   612- r3 I) d# E! X* D* \' U
      1212    12     0   214   201   211   406   406   610   600. m/ J" o4 O! w' i$ S
      1402   202   214     0    30    20   215   220   424   414  q9 g! [1 k' R& f
      1413   213   201    30     0    10   205   205   409   399
    & W6 a, j: C5 j$ b+ I# t  1422   222   211    20    10     0   195   200   404   394/ e+ Q. d0 f' T
      1617   417   406   215   205   195     0     5   209   199
    & x1 F' q( t0 i3 K5 M: S6 \% ^  1618   418   406   220   205   200     5     0   204   194
    * o9 f2 w- K' d4 s( N2 P  1822   622   610   424   409   404   209   204     0    100 G2 n5 C0 p4 `* O* U$ |& o0 E
      1812   612   600   414   399   394   199   194    10     05 ]9 y$ l0 k* E$ Q7 c, \5 i
    , F  ]- M1 d. z- Z( L
    R =
    * T  b7 A# I1 i9 H4 S   1   2   2   2   2   2   2   2   2   27 G& k. O! ?) x) C
       1   2   3   4   3   4   4   3   3   3
    6 w3 v, C" Y5 T! p   2   2   3   2   5   5   5   5   5   5
    $ F4 g5 y. n. x   2   2   2   4   6   6   6   6   6   69 s6 S) L: m6 b6 E3 D9 b
       3   3   3   6   5   6   6   8   8   8
    ' }9 f+ g' d5 R# w& }   4   4   5   4   5   6   7   7   7   7# A+ |' F* W- C5 t% H
       6   6   6   6   6   6   7   8   8   8' i! O" k$ g& e- }9 w9 S
       5   5   5   7   5   7   7   8  10  10: Z! k0 s! E  R, ?
      10  10  10  10  10  10  10  10   9  10- O1 I) a9 x" I! s
       8   8   8   8   8   8   8   8   9  10$ l6 _& l0 u3 L1 O( H9 L
    结果分析:+ t/ r/ I% h$ K7 Z
    通过运行结果:可看出,
    ) F! C8 q) r0 L7 Y, o. P# X 到 (即 到 )的最短距离为1812(km);
    4 c4 X6 m0 p- p1 | 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    & v3 i. U$ Z* |/ x2 ?% }! v; }" v 到 (即 到 )的最短距离为1618(km);2 i1 g# g* F  Y
    到 的最短路径为:V1→V2→V3→V5→V8。) E0 b2 g) _( o  R. S7 p

    , P/ Q5 c' J% V) a! z
    & Z" P- m' s! c* @& e1 Z! J
    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, 2025-6-8 23:07 , Processed in 0.567827 second(s), 54 queries .

    回顶部