QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    & i# H4 W) d& @" t- ?+ f一.实验目的:% g6 H2 V" o  `4 Q( B; K( b
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    ' n. `& B3 Z$ p" Y2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
      D' o  Y) l9 I! r- P0 Y6 I7 \二.实验内容:  s; V4 i  Y% |$ D) ^: F; M
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).  l) ~" i! U1 F6 F3 j2 [5 N
    为方便计,1km主管道钢管称为1单位钢管.
    0 m6 p, v; M$ l0 d# w$ w  n6 R一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
    6 q; p  F* p8 E
    ( O9 j: y6 q; E' w1        2        3        4        5        6        7" d- j% K/ Q8 R- Z5 @% W# F+ m

    - u/ v7 W; H. [/ j3 W# ?800        800        1000        2000        2000        2000        3000
    # t/ Z' c! B! ]9 r ! {3 n2 j/ J8 z& \4 A9 j
    160        155        155        160        155        150        160- a# ~! `( ]; J; m. C
    : S' T  k3 E* v% @1 W& E
    1单位钢管的铁路运价如下表:1 ^, d; V1 N5 \) r3 h7 ?
    里程(km)          300
    5 [4 c8 i; B$ e$ [' P9 m; P301-350        351-400        401-450        451-5007 f% B4 n( c' `1 @  e$ M# ?( Z6 P
    运价(万元)        20          23          26          29          327 M2 b! o" N; ]. q2 I
    里程(km)        501-600        601-700        701-800        801-900        901-1000, q( ^+ {' [4 J( l  d/ `
    运价(万元)          37          44          50          55          60" n0 Y% Q6 M: f- f/ {8 O
    1000km以上每增加1至100km运价增加5万元.
    ; ~! t% d" U3 C1 f* ?2 e' D$ p0 Q6 Y& w公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    $ @) W7 j7 O6 e$ f; M$ j& J假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    ' d& O! O7 O: H9 Q* G 1 o* [  {6 T4 f6 x: u2 u3 r
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小., G& |0 w5 o" F0 |
    三. 模型建立
    * z6 _: g% ?& d# n8 k+ i# F5 k设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :. g( e8 Z. n/ P0 g

    3 ]5 }' U/ h. z3 d1 f% E$ \利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离7 d: m2 n: b8 e, @7 ~. |) @

    6 c: ~) v4 W/ m+ ^解:先写出带权邻接矩阵:
    - |, J, u$ U" f% L8 y 1 B! N8 f; J+ N9 j9 h! L% z
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    9 v9 ~4 g" @% \% k5 O四. 模型求解(含经调试后正确的源程序)
    ' @1 Y! K3 X- V' G! n  n(1) Dijkstra算法; H3 B. d8 T. |: l$ n9 I' s* D
    road1.m文件源程序:0 n8 d! h0 e6 |% `" ~. H9 ^; @
    w=[0 1200 inf inf inf inf inf inf inf inf;. `5 \( g( \0 Z% z4 H
    1200 0 12 202 inf inf inf inf inf inf;0 T" C* x* N. Z0 r: J0 q- f7 w& P. c5 c
    inf 12 0 inf 201 inf inf inf inf inf;$ d5 K4 s9 G" Q2 J1 Z* S  ~8 t
    inf 202 inf 0 31 20 inf inf inf inf;
    ' ^9 c. ~  d1 M$ W$ \- `! k/ ?: l; O2 D" S8 cinf inf 201 31 0 10 inf 205 inf inf;
    1 i8 Y$ L! ^% e1 H$ s! A4 e- j) Jinf inf inf 20 10 0 195 inf inf inf;( N# B7 e/ [: t6 v3 `0 K  E
    inf inf inf inf inf 195 0 5 306 inf;/ T+ `# W  s5 P- i1 ]% Z
    inf inf inf inf 205 inf 5 0 inf 194;! j& P3 Z& j8 A1 T7 I
    inf inf inf inf inf inf 306 inf 0 10;
    * D3 B5 c8 t+ P4 G# e9 X+ k' V: Dinf inf inf inf inf inf inf 194 10 0];
    5 Y- m. ]+ U; S2 Rn=size(w,1);9 Z5 o4 Q: E: n" p  _# I) k
    w1=w(1,;
    1 `/ H- s  K2 W* H: N; q3 Rfor i=1:n4 t+ J1 H0 \4 X/ Q1 l4 |
        l(i)=w1(i);4 l7 o( ?0 _1 N
        z(i)=1;
    1 A" ]8 b+ R: r  Z/ J' [end
      G# f; a9 g. T+ I1 ss=[];
    ' [2 U8 @; x0 v" }s(1)=1;
    2 i4 H4 S) u: U$ wu=s(1);2 b; G% T& P8 I% b& p
    k=1;1 k# b7 e- D; l
    l;
    . \; t8 `3 U: t, n0 u& P6 Sz;
    1 F: Z$ B7 o" h9 Awhile k<n
    0 z/ q, |, @6 k7 ^# g    for i=1:n
    ; ]6 T' H' l5 s; ]    for j=1:k
    7 f9 U" ?. |( ]- ?/ |       if i~=s(j)
    . P, J3 p- u7 _) r+ q          if l(i)>l(u)+w(u,i);
    " K4 o0 W# m: k2 F; k             l(i)=l(u)+w(u,i);# [; Y' N4 N! C- x* P
                 z(i)=u;1 G2 X2 w5 `. e
             end
    4 y: l9 T2 u9 V- _# ~+ X5 @     end- B! m( P% T6 T' p- D
    end
    # J7 ?0 A2 n8 R3 M0 oend5 g$ s# c% `( S5 Q( G+ l3 s6 _
    l;
    6 F: F9 ?, D& X& V6 M z;
    3 D0 ^( p4 ~! ^' Z3 g' Bll=l;5 O- k* N! N6 j0 k. e( E2 A
    for i=1:n
    / b# K* f+ l9 U- W& t) b for j=1:k* N6 u2 q- s2 D* j$ k$ k3 {
        if i~=s(j)
    + e8 X& d; c, u4 i/ z       ll(i)=ll(i);
    : S9 n! p2 ^* d   else3 l! m* \+ d. m' ]8 W1 A
           ll(i)=inf;1 {' D& {, v5 T, L" I% {
       end3 i5 ?( U- L. d3 X- k3 c+ D
    end6 ?9 S4 f! C( \# g6 O
    end
    , `# n4 A" w; ]# `0 olv=inf;3 n3 e, r. M9 l4 J$ S
    for i=1:n: Q, T7 Z1 y+ ]' A. o
        if ll(i)<lv
    / O% n3 l3 N' O9 O; t# M       lv=ll(i);; F: J! ]. l$ j* a. s
           v=i;
    6 r: S8 j" h0 d   end' X* s$ Q$ }' H- ]4 n( s8 ]9 [, j
    end
    0 w; x. f$ f8 m/ W; vlv;
    / c- k4 Y/ P/ l& g' B; @8 g0 u8 vv;
    : [$ Y$ @4 t9 t" o3 v! g3 Qs(k+1)=v;- L+ q! P$ l* ^0 M) ]* \
    k=k+1;. B/ Y; m9 m7 Z% }8 x
    u=s(k);
    * m7 v2 a  g, ^* C. Mend( c1 y, |! x. Y* D. V0 u
    l
    % u! `! Q. p- yz6 g" i. ^9 F# f0 j6 i$ F) {9 Q

    4 G, R4 `& \: @$ V(2) Floyd算法  D2 ]$ n& b# `) z1 Y" h9 h5 X
    road2.m文件源程序:
    5 h$ g* L; Y5 g% wa=[0 1200 inf inf inf inf inf inf inf inf;, X$ P5 r5 }, S" X/ z' Y& V
    1200 0 12 202 inf inf inf inf inf inf;
    # l' w9 x% U- i: x4 P" Sinf 12 0 inf 201 inf inf inf inf inf;
    7 G+ C* y+ f) t- c, winf 202 inf 0 31 20 inf inf inf inf;
    ( n5 q( h  Y9 d- k1 ainf inf 201 31 0 10 inf 205 inf inf;( V6 D( K# {& `" H7 c
    inf inf inf 20 10 0 195 inf inf inf;
    & C$ H" Q( R8 d5 Winf inf inf inf inf 195 0 5 306 inf;
    ) y/ W# Y' S0 H4 tinf inf inf inf 205 inf 5 0 inf 194;
    ; U2 I0 E6 a( M# V/ [inf inf inf inf inf inf 306 inf 0 10;$ w: D  K! V- s1 N6 q+ i
    inf inf inf inf inf inf inf 194 10 0];4 X' ~8 z  V( i6 m0 ?" w0 ~3 `
    [D,R]=floyd(a)9 i" v1 J) j* w% }8 t
    floyd.m文件源程序:
    ' F- U. s; K6 x7 \function[D,R]=floyd(a)
    % [5 V. s  Y# F, o0 kn=size(a,1);
    7 ]! `% d7 n% [8 e% K4 }! w7 FD=a0 `, Q: [) _" x
    for i=1:n9 ?/ v' I: o- d' F! E
        for j=1:n- L& y5 T, E' N" r% r' p
            R(i,j)=j;# l) y: B+ V. n* U
        end
    4 R% o3 m& }) dend2 q. Y2 O/ P( C0 X' h& D. c* m8 C
    R
    . t7 E: G7 K7 M7 h; V5 _0 P3 kfor k=1:n
    $ ^, P- q2 ~# b8 F3 w% D    for i=1:n( x& y- d1 L6 W5 {  v
            for j=1:n6 Z% R! ~0 [6 Q# Q) h, e6 ~: }
                if D(i,k)+D(k,j)<D(i,j)
    # D# k  ?. S0 C9 d% T" A; u               D(i,j)=D(i,k)+D(k,j);8 e: _/ n- b$ f( P1 k5 |
                   R(i,j)=R(i,k);( m' s9 z( K4 @) p* P% L
               end1 r: g# }) b. f+ N+ G
           end
    + h5 g* Z9 S! }- S   end2 Z4 V7 r' e" U8 J- l! Q# B
       k
    . E4 H+ `+ n' S   D( G, Y5 v/ E+ Y# K, j  O
       R
    7 I( ~  d& F3 }, l: C6 B7 pend
    , J" N  d& n& _. A" k' k+ w9 h' U3 i五.结果分析; d1 W( @0 J, X
    (1)Dijkstra算法
    ; L/ n$ ^$ `+ c) J运行结果:
    . b) r% n7 Z; u# Hl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812" o( G* b8 m2 i2 ~" @  o$ R
    z =1     1     2       2     3       4     6      5      10      8
    3 H2 i& e: f4 }: N
    # n) H+ y: N# l结果分析:
    ! e5 f1 ?! Q( W1 l6 W通过运行结果: 到其他顶点的最短路的权 ,可看出," `! X' ~5 \1 y- K0 r
    到 (即 到 )的最短距离为1812(km);
    * m. M2 I1 N8 ]+ y0 [. u9 J* `. N 到 (即 到 )的最短距离为1618(km);* k1 C0 G. t/ h: s. E
    ) o; n% o/ S- q- x6 c
    到 的最短路径为:V1→V2→V3→V5→V8→V10;" J3 r/ T# M8 V4 ]  w
    到 的最短路径为:V1→V2→V3→V5→V8。
    . d8 \+ K6 l& Q* G3 }4 h
    2 g8 Y: ?& @5 u  N(2) Floyd算法8 a0 N0 [" Q" [+ v- o5 Y
    运行结果:
      B6 O; ?; o) _( u  }9 L, l) @* BD =
    * i$ T* R* V& O' v( r     0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    6 z3 c: u. F; V5 c) z) @  1200     0    12   202   213   222   417   418   622   6127 l- q4 D3 o0 n" e4 x; A; q
      1212    12     0   214   201   211   406   406   610   600; L+ n; g: v5 [
      1402   202   214     0    30    20   215   220   424   414; C% ]4 M! T& Z; r2 z
      1413   213   201    30     0    10   205   205   409   399* X6 y0 C( F- \) q6 [0 i: j3 w4 J
      1422   222   211    20    10     0   195   200   404   394$ ?! _1 Z3 Y+ Z6 B. W; m! s5 v
      1617   417   406   215   205   195     0     5   209   199: s: w# w3 s9 y) [$ \8 S1 ^  y
      1618   418   406   220   205   200     5     0   204   194
    - q/ E7 y9 _2 t3 x- t  1822   622   610   424   409   404   209   204     0    101 ^% N: J* R, |3 R$ X
      1812   612   600   414   399   394   199   194    10     0. N2 K8 k& b. i  y# _$ m
    2 @* F7 ]6 X3 o( v) w
    R =; o4 C0 V! v$ ?( ^
       1   2   2   2   2   2   2   2   2   2
    $ f0 W# t& |3 x$ ?( M8 Z0 i   1   2   3   4   3   4   4   3   3   3
    " e" @: X! T% ]& s   2   2   3   2   5   5   5   5   5   5  f% @3 R+ F8 s9 O; q- C
       2   2   2   4   6   6   6   6   6   6
    5 ^* J9 f% _- P& p" q( J; Z& z   3   3   3   6   5   6   6   8   8   8* b/ k0 S/ m  W0 p4 t7 y; A
       4   4   5   4   5   6   7   7   7   7
    8 I, i! }) ]) y! t# S7 m   6   6   6   6   6   6   7   8   8   83 |5 P, S4 v8 a/ ^- g
       5   5   5   7   5   7   7   8  10  10
    " L# b5 m$ [3 J# V& G& f6 ]' e  10  10  10  10  10  10  10  10   9  10) o6 l: r1 g1 ~; X% e) D* V
       8   8   8   8   8   8   8   8   9  10. Z# S2 a$ t, }- ~* ?
    结果分析:! i! H5 z, |$ e
    通过运行结果:可看出,
    . T  E& _" T5 w 到 (即 到 )的最短距离为1812(km);
    ( X% K" T2 `( W0 \  R7 Q' f 到 的最短路径为:V1→V2→V3→V5→V8→V10;/ U$ B; z3 u0 N4 c( ?+ m
    到 (即 到 )的最短距离为1618(km);
    # Q9 |# S& @+ @+ f. f( x 到 的最短路径为:V1→V2→V3→V5→V8。
    & t* }& P8 C' z9 O; e8 o9 O. q! W/ ?2 Z4 h
    ) A3 c4 ~$ ?5 S" Q% m( G
    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 10:54 , Processed in 0.429773 second(s), 56 queries .

    回顶部