QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    % T" p' Y  n& ?- s2 ?# |5 H. r3 O一.实验目的:
    ; E6 [# n% d/ m$ D3 i& v6 s; F) d1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;" _$ L: G+ L  v) U. w
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    1 e5 |7 q& Q8 J* U6 Z, F二.实验内容:
    - G! G4 }6 W; ?6 F* h2 ?: d要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).4 Z$ X; L& Q' C4 n& A2 b
    为方便计,1km主管道钢管称为1单位钢管.
    % W& i! g3 O3 B7 z一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
    1 h$ N* s5 H3 o3 i/ J. E. k , G' v* R9 c) v' x8 Z
    1        2        3        4        5        6        75 H* t( ?% T) Y
    ) ?/ m" P9 Z3 b% `. q
    800        800        1000        2000        2000        2000        3000
    ( _  i( u1 ?9 g0 A0 r1 p 0 F) Y  C& r* ?: W3 g: a# ?4 O; f6 p
    160        155        155        160        155        150        160! H; @7 `3 U1 Z# l/ A8 P! U$ J9 e, B
    & [) J% H6 {) s' B7 e- Q
    1单位钢管的铁路运价如下表:' y9 i* ^9 A4 E) G( Z
    里程(km)          300
    2 }3 ^9 L- R. w0 i3 @2 [4 Q301-350        351-400        401-450        451-500
    2 `( g# {, @" Z9 _* v运价(万元)        20          23          26          29          329 W( j1 x, j2 [1 @# h7 @/ b& w" V8 x7 c
    里程(km)        501-600        601-700        701-800        801-900        901-1000+ R- S) C, N0 C% M5 ]! Q
    运价(万元)          37          44          50          55          60
    ( M7 j+ M. U! u+ c, r1 I1000km以上每增加1至100km运价增加5万元.9 j9 o4 @1 z5 W$ |+ s- z
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算)., _1 u# a: o  }0 h2 r/ u
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元./ Q4 P# V/ c( B# r( M: _& \
    8 g5 Z/ l$ R* M! ?0 L. Z4 h
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    - w& x* t1 R4 n# Z# z$ i三. 模型建立
    0 k4 }( o% K  X& d& g1 J* `设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    ; \$ T% J  L; w
    : u6 I( n* c0 r6 I利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
      y% W, z; I0 | * J! L: {4 F, R! O* K- o4 H
    解:先写出带权邻接矩阵:9 d0 @. U/ p+ _/ a
    3 {, A" c9 P+ d, z8 K, k
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    9 x6 J" ?  Y) o/ r四. 模型求解(含经调试后正确的源程序)
    % Y% c# V9 `* u1 o% _9 |3 ?0 G8 h  p(1) Dijkstra算法8 t9 o, d9 s4 @" j
    road1.m文件源程序:5 j+ [9 h6 S) Y4 `
    w=[0 1200 inf inf inf inf inf inf inf inf;
    - O  s' b0 a: c# a1 f9 z7 S2 q1200 0 12 202 inf inf inf inf inf inf;
    ; r) M/ J( j0 p3 Z' finf 12 0 inf 201 inf inf inf inf inf;
    / k6 {* ]6 j" P0 r% {1 Iinf 202 inf 0 31 20 inf inf inf inf;
    ( L, @- e8 Z5 e! }- ?$ [6 sinf inf 201 31 0 10 inf 205 inf inf;
    ! ]$ [6 G3 @" Hinf inf inf 20 10 0 195 inf inf inf;
    8 v' L  o& [9 s% p  vinf inf inf inf inf 195 0 5 306 inf;% h$ K! }6 Y8 a, Z
    inf inf inf inf 205 inf 5 0 inf 194;  M0 u$ d3 j, z; Z
    inf inf inf inf inf inf 306 inf 0 10;* e  E* l( Q7 A; T# s
    inf inf inf inf inf inf inf 194 10 0];
    , U/ J9 p  S1 ~+ \2 F! Q# m: m* f, nn=size(w,1);& e7 L" a# [4 Q' `& F+ k& F& B
    w1=w(1,;2 W9 J( J: H4 V1 X, M& d5 j5 q
    for i=1:n
    / q1 B" e# k" s" m6 r    l(i)=w1(i);
    8 O$ ?7 Y& t+ p6 v+ L' i    z(i)=1;
    ) }* T' F1 ]/ J8 Wend
    ) l8 `% o* h9 f" b/ i$ ~s=[];- E+ s# x( C0 Y& \$ R
    s(1)=1;/ l! g1 O, L( N. \
    u=s(1);
    $ U9 n$ |7 N" K/ Y( @k=1;. G+ E6 J  ^. h3 |9 Q& P
    l;+ A( c0 R0 l# l. X
    z;; C& M  n$ a1 g9 S
    while k<n. q! n/ S; s) w& o; o
        for i=1:n
    + n  Z0 j/ H3 A: Y9 ?    for j=1:k
    5 p) o5 t# f( y) h, K( |, z       if i~=s(j)1 q1 i- a: s, g
              if l(i)>l(u)+w(u,i);
    , A( i0 V. x7 |/ c             l(i)=l(u)+w(u,i);, e- S6 e1 V5 R  Q) h
                 z(i)=u;
    5 c' i$ }2 C: t1 X) k         end
      B: c# i' I9 g- @# t: t2 c$ ^     end
    + B# D3 ]3 q6 Y end
    ) j. D$ s6 N* y. I" ~end: R  s- f6 [9 m: J8 r! J; t
    l;
    ( r" d4 {3 i8 R" P4 h z;, \2 D" P' v% s: Q9 e
    ll=l;$ j8 \; n6 @' w5 H* q
    for i=1:n4 x* ^; x7 H4 z% l- n6 D
    for j=1:k
    * E/ `5 v4 L' w5 r4 b) m9 \! d    if i~=s(j)" X1 E  b* z1 @3 F0 |
           ll(i)=ll(i);% V+ I) P1 B" D4 ]
       else
    : a4 p' R+ }# T! P, a% F       ll(i)=inf;
    ; ?9 L8 @3 \& z6 Y8 l9 e5 b% a   end
    ) Q2 F( y* V7 |end5 e* D/ n/ |$ h' O! ]- i
    end- _6 B) |# S. }9 F2 S
    lv=inf;
    ) H2 ]2 I* O8 xfor i=1:n% h/ j! G7 x8 g9 v; ~! ?( V+ _  Y
        if ll(i)<lv
    7 f; R2 Q* T0 W0 J       lv=ll(i);# o  y; }, }! [) a5 S
           v=i;
    ) `- r# ~+ |3 @  K4 O& K! J   end: n% h% B2 l, g6 u
    end
    3 ]! n0 o0 V/ W( i& Qlv;
    * Q( R/ V3 Z1 |v;
    , b, y# X7 |$ Q& s% t& Ts(k+1)=v;
    3 p) E" a% g  l6 W( a3 p3 h& M  Yk=k+1;1 L1 \2 _8 w7 J/ W. Y! L
    u=s(k);, J3 O$ D; b3 P1 ~* P
    end( W+ U. |, F1 ]1 o: p' A7 V
    l
    8 z* ~0 ]: ^# V4 n& ^z) @2 M/ C" [; M6 P! F

    8 E( }# I5 }( u+ }- T3 Z(2) Floyd算法
    ' y/ a" J2 u  O# t2 iroad2.m文件源程序:# x: `4 g% s. v' S/ w
    a=[0 1200 inf inf inf inf inf inf inf inf;
    & h4 J- n4 t1 p! M: \5 {* Q1200 0 12 202 inf inf inf inf inf inf;1 p7 {. B. G" W: w3 A: d+ a& g
    inf 12 0 inf 201 inf inf inf inf inf;
    4 |0 n( D4 C# q+ c% u( Hinf 202 inf 0 31 20 inf inf inf inf;
    " ~" G9 c4 V' U! Kinf inf 201 31 0 10 inf 205 inf inf;- `0 W5 k+ {5 A
    inf inf inf 20 10 0 195 inf inf inf;
    4 b- K# u+ l! j' k) `+ C: sinf inf inf inf inf 195 0 5 306 inf;/ A; [+ S: C  _
    inf inf inf inf 205 inf 5 0 inf 194;
    # f# `% c+ O, a2 I, t) k' P: Dinf inf inf inf inf inf 306 inf 0 10;
    ! @: ~- k1 I7 l1 dinf inf inf inf inf inf inf 194 10 0];
    1 a* `0 M2 N! I; v[D,R]=floyd(a)
    " O( C% a% y  R7 R, jfloyd.m文件源程序:8 C) e  ^3 d; v/ X  D4 A% U9 R
    function[D,R]=floyd(a)
      p- ~( n2 r% A. mn=size(a,1);
    , v# q( N  I! f, M- f$ }1 m7 OD=a
    ! C$ Z2 q$ ~" }' `+ u  ~; Rfor i=1:n+ V( a1 {, f1 z- ]
        for j=1:n
    6 e9 K3 Y4 D+ F$ X% c* s        R(i,j)=j;
    0 X8 n+ s) P' f9 m* n5 ^    end9 \7 K  |9 I- |
    end
    , \' w1 N: C1 ?& s" x# H, s9 QR
    9 O. U; i7 D7 L; `/ ufor k=1:n9 T' N' c' m1 ~
        for i=1:n
    & e6 Z: r8 l) x! j+ \3 I8 f) [, S4 Q        for j=1:n- e* d. d# _: G) v/ [
                if D(i,k)+D(k,j)<D(i,j)! T* D: l# z5 F: h5 O* d. ^9 y: R3 u
                   D(i,j)=D(i,k)+D(k,j);: O/ m# t. c6 v/ I$ Y# @% S
                   R(i,j)=R(i,k);3 p2 ]/ B/ w: B0 Q
               end  h/ p. ?+ p7 E% a* C
           end
    7 r6 b( D, h' V! }" K8 }   end
    - ?/ r% C* _- _, L   k
    8 S9 y! p) H: O" t4 H) l   D) m7 v) |6 B9 U
       R# y$ o3 [' o+ d' X. h; p' k
    end
    . c% _7 j& C' j; ]* h, o五.结果分析& g8 S3 g4 ^" c& v6 n8 K
    (1)Dijkstra算法1 D( `7 o7 ^1 s
    运行结果:6 t1 s$ `5 n4 x" T
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    + N, m; Q' q' D; v1 G1 [# sz =1     1     2       2     3       4     6      5      10      8
    6 [0 A8 I/ }2 W1 F4 i1 |' d4 G 4 S2 b) S& c/ E7 g- C. f5 n( ?
    结果分析:0 u2 t) v: Y- f/ H  h
    通过运行结果: 到其他顶点的最短路的权 ,可看出,
    % I" h: b4 U- O. h 到 (即 到 )的最短距离为1812(km);
    9 c9 |$ i- ?- f. i" P 到 (即 到 )的最短距离为1618(km);9 Z+ M$ j6 E1 N# r' F, {& d- q

    & j5 v: J! f4 ~4 S5 Q2 f, y* H, i: ] 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    # P2 l( R+ D8 [# ` 到 的最短路径为:V1→V2→V3→V5→V8。
    $ p8 H. W! O  v( S; d5 }) p  t! _
    (2) Floyd算法2 _0 H* `: N- ~; `
    运行结果:
    - ^% p' M. q6 a! E8 g& J# {D =
    8 b& t( J2 b( `0 {4 J     0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    7 S) l# J0 v* `: {! o# d2 X  1200     0    12   202   213   222   417   418   622   612
    3 {8 A* Z  }: B% ?- T$ N  1212    12     0   214   201   211   406   406   610   600
    % B2 T9 t- r4 K, Z  1402   202   214     0    30    20   215   220   424   414
    % ^2 H# i1 P4 h$ k3 U  1413   213   201    30     0    10   205   205   409   399
    . M# p- Y6 N6 t8 d" l/ A  1422   222   211    20    10     0   195   200   404   394& s& f( u7 V2 }. x5 z
      1617   417   406   215   205   195     0     5   209   199
    8 H- Y1 b- q* Q2 V# Q8 W$ t  1618   418   406   220   205   200     5     0   204   194
    4 Q. z0 O/ X8 B+ a/ o  1822   622   610   424   409   404   209   204     0    10
    ) \* Y; O' i5 D4 S( d+ I+ ^  1812   612   600   414   399   394   199   194    10     0
    ' |5 K) X$ I: {1 J, n2 `+ {: a8 b6 ~/ M% R
    R =
    * J; k8 E+ h% g) P3 o+ l   1   2   2   2   2   2   2   2   2   2
    / a# Z  q! M7 U) W, E   1   2   3   4   3   4   4   3   3   3
    2 H! H1 J1 Y; N* a/ `8 \  S( f   2   2   3   2   5   5   5   5   5   5) X. x3 y# c' l% ]
       2   2   2   4   6   6   6   6   6   6
    9 i' R* ~7 I7 y2 t1 [( [   3   3   3   6   5   6   6   8   8   8
    ( F  I7 m% c- [! g   4   4   5   4   5   6   7   7   7   7# B+ o6 p7 H3 X' d$ Q4 Z
       6   6   6   6   6   6   7   8   8   8
    2 Z0 r" h# l2 O7 @& `8 `% r   5   5   5   7   5   7   7   8  10  105 w( Q; J# S$ w( X# m7 O
      10  10  10  10  10  10  10  10   9  10
    ) B8 m. ~4 h1 Y# r7 G- V   8   8   8   8   8   8   8   8   9  105 g4 m  }0 w- D3 `
    结果分析:. V  W  ]! H3 G9 h! b2 Q' y
    通过运行结果:可看出,- Y$ e7 }; G3 @( l9 R+ M
    到 (即 到 )的最短距离为1812(km);
    - N1 V- K+ Q  m7 u) q 到 的最短路径为:V1→V2→V3→V5→V8→V10;6 L3 J- W8 b* F$ m4 R" ^1 T
    到 (即 到 )的最短距离为1618(km);
      S* `- h8 j; _" R# j5 j& ` 到 的最短路径为:V1→V2→V3→V5→V8。
    ; d# z# \) ~( o0 i: R1 _2 j
    9 U5 f% w$ k( m. ?8 K3 u! n' O4 j9 ?# e: O- R
    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-30 15:46 , Processed in 0.403976 second(s), 54 queries .

    回顶部