QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法6 y! H; s* h5 W. U9 y2 V5 H
    一.实验目的:; @# P& B4 w' N* j! ]! P* i
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;6 w: T; [# y5 H/ B% d0 K/ Y' f
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.; D# }; [; w0 H0 _" F/ m' A
    二.实验内容:
    % f3 @( ]0 J4 I5 z要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).* v4 \3 e3 H' j+ q2 J
    为方便计,1km主管道钢管称为1单位钢管.6 S1 E/ G# v3 S2 U+ J% ~
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
    * G+ ]: }6 T+ Z! }9 [9 ~ 2 M  l" ?3 E' X& y% X. P4 y
    1        2        3        4        5        6        7
    1 i! t4 U' R0 Y% d5 }$ C ' c8 H: r3 |) e: k& _- O4 T8 s
    800        800        1000        2000        2000        2000        3000
    1 i& s2 Y7 {; z2 H5 f- M 1 f8 v) z9 e) o: q
    160        155        155        160        155        150        160
    0 y: v" q. J/ W  k; f3 Y
    ! n% S9 N. q2 `, b+ }0 M* Q9 [4 k- C1单位钢管的铁路运价如下表:" ]0 C& ^! o' G) U, q
    里程(km)          300& ?& M' r( `; [9 q' J
    301-350        351-400        401-450        451-5006 C" H# ]) h3 X: }4 n( R2 Q* `% I
    运价(万元)        20          23          26          29          32! Q! V+ X8 J1 T/ l! H. C
    里程(km)        501-600        601-700        701-800        801-900        901-10006 n) V$ V6 [; z2 u! N
    运价(万元)          37          44          50          55          60
    + F! B! \3 Z% p$ t! J" N7 A4 H* y1000km以上每增加1至100km运价增加5万元.
    - P- ~4 f4 n# F公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    / z  J$ @2 z* K假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    1 d" h9 C8 F6 c6 ?2 I5 t + C! u1 o; j  I. e
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    - k. \; s. K8 |. A: j3 ~三. 模型建立" }+ q. {! Z7 U+ M. W
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    , p$ o3 G4 Z. {, N: s & a+ E3 ~6 l$ k, ]7 t
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离4 m0 x- E% b* O- l% C) e3 U7 c

    2 H+ ]" l) b. Q解:先写出带权邻接矩阵:
    9 Q. o2 Y3 D; |" u9 Q* _9 g5 f; f
    5 f0 I  N3 e! g8 j后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    ' N- L* y% N3 R" c4 [) k; P四. 模型求解(含经调试后正确的源程序)
    ) t# `* N: h/ N- ~! h( O" _# \% S- d2 f(1) Dijkstra算法
    & o% M: g" f- x7 Q, T1 Y2 d0 E3 Croad1.m文件源程序:
    4 n& F6 A* d* |( Q6 Y: r3 Uw=[0 1200 inf inf inf inf inf inf inf inf;1 t! D+ j, y1 h5 {/ N1 l; h
    1200 0 12 202 inf inf inf inf inf inf;
    ! l$ `' h4 W! x1 m( q# r/ Pinf 12 0 inf 201 inf inf inf inf inf;
    8 u, ~; g# \5 S- iinf 202 inf 0 31 20 inf inf inf inf;0 U& r5 F0 U( Y6 u4 G9 x. D
    inf inf 201 31 0 10 inf 205 inf inf;- R3 ]3 Z( F" I. x+ r( J0 I
    inf inf inf 20 10 0 195 inf inf inf;( H& k' H4 Y$ T& }; I3 _
    inf inf inf inf inf 195 0 5 306 inf;
    # _1 [6 \3 y" M* xinf inf inf inf 205 inf 5 0 inf 194;( L# N0 e% N8 l1 _! ~, w: m
    inf inf inf inf inf inf 306 inf 0 10;5 {2 {! J- L4 e: \( u( T
    inf inf inf inf inf inf inf 194 10 0]; ( j9 y- o- A, O6 [" ?( t
    n=size(w,1);
    ' Y& I8 G& E& n# \w1=w(1,;% h2 s2 V$ r9 a: y0 X$ J
    for i=1:n( I) Y% y; p4 \8 n1 E* s  d) H
        l(i)=w1(i);
    + O/ V* ?9 c9 `. |) {# d; h    z(i)=1;* k5 _" m' |# v! D
    end
    . F7 n/ O  Z, M5 u) H# ^s=[];9 D5 `9 ]9 W7 K; `& I* B* x
    s(1)=1;% q; Z/ [4 a; v6 T
    u=s(1);% R, d  O( e/ {( }8 }, c
    k=1;
    + m* y) x& g4 g( x2 N- {) Q) Z0 wl;
    6 L6 N! h* \! p& c8 x# `/ J  ~1 `; s  Mz;7 b' X) R1 Y+ l+ r2 F' i
    while k<n
    6 G6 X: M4 d9 z% M3 q5 e3 O* ~" x% j    for i=1:n1 M3 m$ e2 e6 P5 Z& S
        for j=1:k2 H1 O3 |) _1 r4 p1 S
           if i~=s(j)8 @6 h& T; ]) q9 [3 C; u/ v, S
              if l(i)>l(u)+w(u,i);' B7 ^2 N; {3 q% y' J
                 l(i)=l(u)+w(u,i);: {7 C# M. x% ^2 I, x$ u+ Y
                 z(i)=u;! V5 ]1 a, L) |; {: U
             end3 V' k' D, D" M* D
         end+ }, n2 ?2 {( s
    end+ D4 G& k" h# T' N/ K+ t
    end' @% h; b% ]! n5 q, ~& D3 D, l
    l;2 k& S. M0 H& z
    z;$ h3 p4 ?8 z8 D+ V* I( W, m' v* \
    ll=l;( o" ^4 B: i4 s8 I8 i2 c' n" z2 O
    for i=1:n6 r5 C  o$ I) L; j  O* x  y9 y1 `$ |
    for j=1:k
    ( a  O- m( b) A3 N$ U    if i~=s(j)1 L3 k2 N+ G2 W9 y
           ll(i)=ll(i);
    , ], F) I2 ?. _( i* R   else
    1 Z! }; `+ {' g6 ^8 u* [       ll(i)=inf;
    ' b( q6 U- ]1 h   end& S+ b/ b  h( m1 @! ?7 u* h6 V
    end
    : i# v$ y& Y8 l" ~$ V4 cend- l& ^: s' g1 F# R+ @9 M0 G
    lv=inf;
    % w" w+ O* T" T" M( E: A( i' _for i=1:n" t2 z2 H: p0 R5 K' z6 O
        if ll(i)<lv
    ) f  V$ Q# A% I9 Q       lv=ll(i);' Z+ }# l8 t5 p7 D
           v=i;
    1 j/ O+ D& r' w2 }; E7 C   end
    $ R# P) ?' B/ ?end
    - R4 J) p1 w$ blv;
    9 N; X- F2 a% r4 Q' s+ c% i5 kv;
    / z9 J& {* ?' u6 d  Zs(k+1)=v;
    0 \1 M& X2 p8 D  L) a& ^  y! ~k=k+1;: Y: j4 G% m. j5 p2 i
    u=s(k);
    ; A( m1 V! `1 e& Tend8 [/ u, R2 q5 T; F5 U' E
    l
    # n7 b4 ?- Z: O4 f1 \" {/ U7 Jz
    ; ]$ F. E5 [) w$ e4 x! L6 y" d  H/ C1 ?; ~
    (2) Floyd算法: j5 z' l+ H9 M5 O
    road2.m文件源程序:/ ?) e. M$ o4 G2 R  R. ?
    a=[0 1200 inf inf inf inf inf inf inf inf;# i5 h: C* y, r- n! O8 S4 f
    1200 0 12 202 inf inf inf inf inf inf;
    9 X* r% e1 n) w! o1 B& jinf 12 0 inf 201 inf inf inf inf inf;1 z7 s* o8 w$ o8 F
    inf 202 inf 0 31 20 inf inf inf inf;
    ' R* |& I/ L4 j6 s4 H/ d7 minf inf 201 31 0 10 inf 205 inf inf;- `( m' D6 m' }6 {+ a5 Q! @( ?
    inf inf inf 20 10 0 195 inf inf inf;2 L" N7 ?: r! r0 }1 P) e$ V
    inf inf inf inf inf 195 0 5 306 inf;
    + T( ]9 G9 R/ g& W# {' Qinf inf inf inf 205 inf 5 0 inf 194;
    7 Q( D5 q8 p+ J9 u( kinf inf inf inf inf inf 306 inf 0 10;! o! E; h8 ^% x" F% o
    inf inf inf inf inf inf inf 194 10 0];
    , }: T2 Z+ h0 l$ s/ N[D,R]=floyd(a)% u$ |" V0 H- |1 [
    floyd.m文件源程序:6 R% U5 m& S- [- r7 v6 K6 |
    function[D,R]=floyd(a)  I0 v6 d! w( w# Y. f' x
    n=size(a,1);
    * t5 l5 O9 {6 A$ M9 S8 e2 UD=a5 @. h) s1 s  G! L$ Z
    for i=1:n
    3 u! X& W0 x' F1 b  w    for j=1:n
    - x  j% o# o! G3 @9 r1 W2 ?! V        R(i,j)=j;6 K! m: r& f4 ?' h5 B- f: X
        end
    / h6 a( o/ o- S8 eend
    # E7 f- N6 c/ m, v" O) V: m$ UR
    1 E& y+ r, r$ ?for k=1:n" }4 B+ J2 X1 w- ]  Q. S
        for i=1:n
    1 t0 r& J+ g  k# y( V) L6 [% b& n        for j=1:n% z  l* n! K6 x% p5 P" F5 V1 {
                if D(i,k)+D(k,j)<D(i,j)! a1 f% l! i: ^& R3 N
                   D(i,j)=D(i,k)+D(k,j);
    8 {  G) U( d% z: g/ n( ~               R(i,j)=R(i,k);
    * V$ |: s4 n! ^+ y7 a* K* B           end% J' q6 u2 g8 J- Z5 z
           end$ a/ r7 n/ X: B0 p
       end
    0 T4 r* p- w/ v$ o/ {   k
    + v8 w' ]2 W# e6 S   D
    7 d2 Y# E) d# ]" J   R
    ( |1 N) E  _8 }7 Uend7 M/ e  j2 }8 _3 H/ G- H. C5 V
    五.结果分析
    4 }; \2 ~- p) v& B- `! R/ G6 Z% s* w(1)Dijkstra算法! k( S; y* B1 H: b6 t' f& H' J
    运行结果:
    7 |: P, x* T( x5 J% P3 Xl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    7 i! ^( c$ k% D; e' xz =1     1     2       2     3       4     6      5      10      85 ]+ a, n% L! F+ P8 V5 N( {
    - A* z9 @0 c! f2 \
    结果分析:
    * C' d0 y0 W8 h& G7 P通过运行结果: 到其他顶点的最短路的权 ,可看出," T* _. Y# O: v, @4 n7 K8 \- a5 i
    到 (即 到 )的最短距离为1812(km);+ Q  W$ l/ ~7 ^( ?" g4 g
    到 (即 到 )的最短距离为1618(km);
    ; g$ V" k+ I( }& {7 G: w3 x; I+ t5 k& e8 {# v
    到 的最短路径为:V1→V2→V3→V5→V8→V10;& n- X! R: ~" W# t
    到 的最短路径为:V1→V2→V3→V5→V8。
    9 V. K. E9 r1 u  ~- ?1 i* Y0 |
      \6 }7 m4 e$ r(2) Floyd算法
    * d7 Y; h0 ^  c, t% q  O1 }# s运行结果:
    3 {$ X+ s) E; e, nD =
    . [+ C' A, `5 M6 l$ v5 [     0  1200  1212  1402  1413  1422  1617  1618  1822  18124 W6 s$ T6 ^6 |  U& W, k) s
      1200     0    12   202   213   222   417   418   622   612
    + j& T/ w- d8 B2 ]5 \3 |  1212    12     0   214   201   211   406   406   610   600' E- [7 C! D. I( r4 H
      1402   202   214     0    30    20   215   220   424   414
    ! Q/ I* ?% N( U  1413   213   201    30     0    10   205   205   409   399
      B! i- l6 W1 O  1422   222   211    20    10     0   195   200   404   394
    ; s8 w, \  G3 w" h5 F  1617   417   406   215   205   195     0     5   209   1996 C0 _+ ]9 _) D3 j  m6 A& T
      1618   418   406   220   205   200     5     0   204   1945 Q: a* a$ D& g0 }. V: p
      1822   622   610   424   409   404   209   204     0    10
    # I+ C+ ?9 o" C# c/ w  1812   612   600   414   399   394   199   194    10     0
    & t9 r: ^# g7 X% ^* Z3 C
    1 S: M1 w+ T; b- J5 J6 oR =
    * |2 A2 t  D. t! P. X9 R/ Z/ o" z   1   2   2   2   2   2   2   2   2   2
    # H: ]/ N% F5 g8 Z; Z0 [. M   1   2   3   4   3   4   4   3   3   36 o" I) ?' q- q! h2 `9 B
       2   2   3   2   5   5   5   5   5   5
    - K  B" o. y8 ?. g) K) W   2   2   2   4   6   6   6   6   6   6
    + l! K2 b1 B  }) h& \1 e   3   3   3   6   5   6   6   8   8   8
    ; S! J+ V5 L" x+ F% o0 X. g; }   4   4   5   4   5   6   7   7   7   7
      q2 A6 Y* L* H5 f- X   6   6   6   6   6   6   7   8   8   8
    3 ?2 q1 T8 ]5 U& P   5   5   5   7   5   7   7   8  10  107 C2 n7 i: q/ M) ^& p
      10  10  10  10  10  10  10  10   9  10
    * J, s1 f7 S! G8 c9 n   8   8   8   8   8   8   8   8   9  10
    5 R9 i) I( X+ J+ j结果分析:
    + t: @! T, D9 r通过运行结果:可看出,+ }3 w: x, |6 g3 ~
    到 (即 到 )的最短距离为1812(km);
      R. J6 t7 K7 F5 m; o2 N5 l 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    * G- V! x- v& s 到 (即 到 )的最短距离为1618(km);
    5 p9 \" J" I# n7 _4 H 到 的最短路径为:V1→V2→V3→V5→V8。) A, c% p1 b% T

    9 ?' V- o# ]' ~8 }& Q  @  A5 F0 S4 q  _3 z
    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-7-29 18:20 , Processed in 1.149547 second(s), 55 queries .

    回顶部