QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法2 i0 u8 f6 {" o
    一.实验目的:
    8 |. H! j2 }6 t" D; p1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;% j# j/ `4 A+ U
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.
    . o% V. ~% r" u+ D7 i  {二.实验内容:
    6 l8 n) L7 I  c. h要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    & g5 g1 o/ A* ~4 u- B; R" R为方便计,1km主管道钢管称为1单位钢管.
    . G$ \; R. ~" Y& s( V. Z* ?) M+ f+ P一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:2 h! I$ G3 }$ W" m
    1 n2 I% q2 J  Z
    1        2        3        4        5        6        7
    2 W9 w8 E& O8 ?3 l
      T, u8 r, \" j9 m& U  L800        800        1000        2000        2000        2000        3000+ C% l  S$ K: g; n8 _
    4 G! i9 ^0 B3 n* B# i5 s4 I
    160        155        155        160        155        150        1601 I# V" \  e" J+ H6 o, q" x/ O
    ( b) y! a5 s6 M' [' y' @
    1单位钢管的铁路运价如下表:! }% y  B* t# U. q8 l' P' p. G: R
    里程(km)          300( m1 s9 ?$ ]" f; H
    301-350        351-400        401-450        451-500
    7 p2 n, x/ F) K, v! F运价(万元)        20          23          26          29          32
    / F+ X% I9 u, K里程(km)        501-600        601-700        701-800        801-900        901-10000 P, Q0 S5 P  K3 A2 ^/ y) p
    运价(万元)          37          44          50          55          60/ r% y: ^9 S. H) E$ E$ e
    1000km以上每增加1至100km运价增加5万元.( j$ z# \+ A+ R. I1 q
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).2 a* s! L9 [* C: w2 j
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    / B+ w: v* j0 d  H 9 T, b4 E  V" o& \3 Z& H
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小., z$ O0 U8 @1 _0 q
    三. 模型建立" X& z, y% C  R- z
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    3 U, V# G$ V/ v6 ` 2 }; X( ~2 p0 m2 |
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    + K  I, l) M5 F/ F . h1 N- n+ B# D8 s
    解:先写出带权邻接矩阵:9 p& A$ L+ {$ ]  Q! q9 y
    + b: `: U% @% }. P8 h
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .7 _4 X5 _! t0 J' H9 w/ F4 V
    四. 模型求解(含经调试后正确的源程序)
    ' h( I( m: M9 {* ^" x$ y8 O  ~(1) Dijkstra算法0 D2 j4 @" y% t5 @8 V0 l
    road1.m文件源程序:
    ' G2 T  y$ V4 W3 zw=[0 1200 inf inf inf inf inf inf inf inf;3 q$ D" V: S+ F' W) ]
    1200 0 12 202 inf inf inf inf inf inf;" c! @! H2 V4 M5 t
    inf 12 0 inf 201 inf inf inf inf inf;7 E5 s2 r& I6 S/ I) M! `6 O
    inf 202 inf 0 31 20 inf inf inf inf;; L% h+ Y+ _5 _! D  J& k! y3 F- S
    inf inf 201 31 0 10 inf 205 inf inf;( F% f' Y9 S/ y5 x4 B1 ]5 g
    inf inf inf 20 10 0 195 inf inf inf;
      S; ]8 V: c5 \' m1 {inf inf inf inf inf 195 0 5 306 inf;
    6 z) ^* v& g! v! Z" N1 C# einf inf inf inf 205 inf 5 0 inf 194;
    3 c6 Y/ c1 j) x! `9 `7 `8 R& _inf inf inf inf inf inf 306 inf 0 10;
    6 d* _9 G/ o( Dinf inf inf inf inf inf inf 194 10 0];
      B. N" ?" X  ]" Q7 xn=size(w,1);
    / x7 d1 Z+ ~. U6 ?w1=w(1,;
    + L8 V( b) `/ u6 B& j6 Nfor i=1:n: q4 `/ B$ R9 ]- n5 s+ G! ?; e% |
        l(i)=w1(i);
    3 _+ z/ E( u) Z6 g& ]- C4 U% @    z(i)=1;
    7 B6 m  i9 a! w5 G9 ]0 Qend! O/ W, W: t) Q: j& n6 Z; a
    s=[];* g/ @6 q" z3 S2 ]/ M
    s(1)=1;9 C/ h8 P3 s6 g( }  ]6 H
    u=s(1);
    4 H$ _% J3 S# W" g3 o1 H3 Zk=1;: V! C7 o  t, y$ I( i
    l;
    6 f* q, [; ~9 n: Zz;
    / ?- [# q4 I1 V5 y* I: b0 Vwhile k<n
    ( k$ g# v" r6 l5 m+ y4 m    for i=1:n
    ( I0 |0 \4 u1 M    for j=1:k
    6 c, j* I# C- t( t: t       if i~=s(j)8 T6 J2 Y0 B9 N+ C
              if l(i)>l(u)+w(u,i);
    7 w1 e" z- ?* `/ d- W6 y             l(i)=l(u)+w(u,i);. q5 G4 B4 D& j; H
                 z(i)=u;% v( B9 Q- J/ J5 c% ]
             end
    " t9 z2 `4 R8 J8 o, q     end
    % Z& t  Q7 `9 U* M$ P% ?: s, [) j+ p end3 w, D0 q2 s7 [% y4 q! U
    end
    7 r' ^, }1 e) `6 k3 f5 M, _ l;
    / x- K4 x% O! m. H z;
    1 l9 D" O" @( F; yll=l;
    ; E: u  U6 r) w for i=1:n
    2 J7 g7 h$ Y1 t* l& |6 f% k4 o for j=1:k0 s8 [. I6 a9 J# u% B
        if i~=s(j)6 h7 [2 |! {- F
           ll(i)=ll(i);
    1 Y. Q1 D7 _+ U: `   else
    * x3 h2 t6 Y1 M" r% s& m; B       ll(i)=inf;
    * x: o8 C; J' u. s   end
    7 z# O# q- B2 W- e7 h. Oend+ |& t: p: W: e2 [; |
    end
    + F; E5 ~4 v- c0 u# f4 Xlv=inf;
    & [9 G  G, O/ J' R' h6 Jfor i=1:n
    2 ]6 J% A5 @" Y1 e: w* d    if ll(i)<lv* [& @, y1 k) N/ W" J  k+ o
           lv=ll(i);
    % E+ u! \, v2 m- A       v=i;
    7 _4 c* s' t6 C   end
    + [! E6 D( v% V$ Zend  w. o5 ~, D( g6 W( m* R
    lv;: O& O0 Z" D* J9 Z: R
    v;
    - H/ W: W- k& As(k+1)=v;
    0 X+ D9 o8 ^# p5 }4 h. ], a( Ak=k+1;" v  F2 [: b6 W* w
    u=s(k);
    5 W8 K- @$ Z% H9 wend9 W( y2 W4 J8 E
    l: C: i. t. f: m
    z
    8 I. n8 ~+ j( d( t3 B3 b$ D* A# p
    ) ^7 U; U0 ~" O' G8 U(2) Floyd算法8 `- Z# n: U9 R" @1 ]" [
    road2.m文件源程序:4 a) e1 Y" ?8 j
    a=[0 1200 inf inf inf inf inf inf inf inf;
    # x# d5 P6 Q; {6 B2 o0 G1200 0 12 202 inf inf inf inf inf inf;* k# L" d: }! o
    inf 12 0 inf 201 inf inf inf inf inf;/ E# j! Q  f! |8 a* l+ G
    inf 202 inf 0 31 20 inf inf inf inf;
    4 v- i8 h& ?1 l( t  o' P; H' Finf inf 201 31 0 10 inf 205 inf inf;3 m+ s" `$ \8 {% D( g* {1 H2 P
    inf inf inf 20 10 0 195 inf inf inf;
    0 l  j8 [1 f# \: B1 x" finf inf inf inf inf 195 0 5 306 inf;4 N" p" G9 _4 ^: s
    inf inf inf inf 205 inf 5 0 inf 194;$ U" y* e, D) \2 J. o  A& H
    inf inf inf inf inf inf 306 inf 0 10;+ E: l3 n/ c" }& O4 A$ B2 X. u0 K
    inf inf inf inf inf inf inf 194 10 0];2 W0 X8 G; J: I5 |; v: W" L8 P9 }" T
    [D,R]=floyd(a)
    8 V( h3 ~* P2 [. m1 p" y# hfloyd.m文件源程序:
    9 X3 |+ ]" c0 `+ w6 \2 Y7 lfunction[D,R]=floyd(a)
    / W" X7 R% `5 l' \9 Yn=size(a,1);1 }1 f& p- T2 r; K8 P0 w; q7 U9 Q- P
    D=a
    + ?6 {% j3 b5 N% Q0 z! s* y$ @for i=1:n
    ! V5 L8 U; ], S  |    for j=1:n
    & I+ X: Y; ^/ \        R(i,j)=j;# @8 E) K+ X8 q% |+ ~
        end
    * i: O  Q' l* M' x4 lend
    : M; _* \6 m5 ^' _' TR; C: f! K: P. o( C4 I
    for k=1:n! n+ M& H, ^$ u& k- Z! [/ |! m
        for i=1:n
    % Q3 x, O1 C: H; f: U        for j=1:n. H- {5 E/ p' l7 R" ?
                if D(i,k)+D(k,j)<D(i,j)
    ' ^9 S9 c9 g; v! `, t               D(i,j)=D(i,k)+D(k,j);
    ( D! z6 U, I' g; a1 n8 Z               R(i,j)=R(i,k);
    8 n6 Z  v  G/ ^* y5 _           end
    ; W; n7 K) Z, y% F7 N1 r5 d3 @9 m" C       end7 j. w3 p& V  n1 Y3 a
       end: u% t; h% n. N0 ~3 K, z1 w
       k( H, B' G& Z! v" D7 T/ c3 H
       D( r, g/ v2 i0 t6 `0 o, G
       R
    # T/ q: L$ i% s; L7 `2 e) Eend
    ; M" P) T9 b2 Z5 _五.结果分析4 d% T- p/ \# Q* x+ l. p
    (1)Dijkstra算法
    5 T$ l+ P# n8 H/ T: u运行结果:
    . g& V5 M" v; q( }' g! Q- Nl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    5 A! G- P; W: k+ \z =1     1     2       2     3       4     6      5      10      8
    # e. [0 L" S; E# k. q- U1 }( F ! T- A' k+ x  r
    结果分析:4 w0 F5 D7 r$ h3 M
    通过运行结果: 到其他顶点的最短路的权 ,可看出,
    7 X  u2 N3 p/ M3 p" t 到 (即 到 )的最短距离为1812(km);) V) Y/ q0 U1 ]. c1 ]) e$ V
    到 (即 到 )的最短距离为1618(km);9 o( X  W  w+ _; p

    " H/ `. t$ O. v; T% Q! T% @ 到 的最短路径为:V1→V2→V3→V5→V8→V10;' r) V! l9 B. V0 o" h& f8 M6 H
    到 的最短路径为:V1→V2→V3→V5→V8。# j: X1 |  D, U. S. S

    ; D! F( N/ f  \# d(2) Floyd算法
    1 E3 }- u/ _2 w! e& T' i运行结果:
    7 l# k% P% M1 u% `3 p( u5 `D =$ p" W- Y2 r9 C+ T/ [
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812$ y' H5 Q. }' y) q! a
      1200     0    12   202   213   222   417   418   622   6126 H' F" e) u) ^, {6 e/ T
      1212    12     0   214   201   211   406   406   610   6000 R% F$ M1 Y- e, j) }' |& U& Y" q1 A
      1402   202   214     0    30    20   215   220   424   414
    7 K5 W3 ^; B  z7 p2 Z" ~# d; C  1413   213   201    30     0    10   205   205   409   399
    6 I6 K8 Z0 h& T4 C( v  1422   222   211    20    10     0   195   200   404   394: ]+ X; s3 z( j- T+ k  x: d
      1617   417   406   215   205   195     0     5   209   1998 ~4 F5 p+ i' A7 f  }. W
      1618   418   406   220   205   200     5     0   204   1942 U- _# A8 K  v; n0 e' E4 a
      1822   622   610   424   409   404   209   204     0    10! K* {/ m7 W, T: E' M' D
      1812   612   600   414   399   394   199   194    10     0
    * F1 b/ h5 X: J! ?
    1 c& Z2 g- M$ C9 }R =2 D! E  ]! {  m$ y
       1   2   2   2   2   2   2   2   2   23 E$ c2 Z% X" [  e
       1   2   3   4   3   4   4   3   3   3
    % q; d) w/ _: D4 ~! M3 f   2   2   3   2   5   5   5   5   5   5; b+ V. X  o, y1 Q5 u4 a0 d
       2   2   2   4   6   6   6   6   6   67 S% \; {7 H  [; p  L  e. e
       3   3   3   6   5   6   6   8   8   8
    , _: j" [% Z5 {9 Z# X   4   4   5   4   5   6   7   7   7   75 G+ g! v; I) b2 d
       6   6   6   6   6   6   7   8   8   8
    ! x/ H" Z% \, x) e  U4 r% d   5   5   5   7   5   7   7   8  10  10
    9 l$ R- X( S( O0 y# [- z  10  10  10  10  10  10  10  10   9  10% N) b" F, v( D6 U& t3 C
       8   8   8   8   8   8   8   8   9  10) z/ \" q5 q4 s6 w7 s
    结果分析:
    + h3 O1 X7 M( e$ n2 {通过运行结果:可看出,3 Z& Z) q2 i; L7 a4 B" A
    到 (即 到 )的最短距离为1812(km);; y, s  \- y- {
    到 的最短路径为:V1→V2→V3→V5→V8→V10;* w& n& d" @; P) `5 M0 y1 i& F
    到 (即 到 )的最短距离为1618(km);- I& x% q8 a% j0 p2 A
    到 的最短路径为:V1→V2→V3→V5→V8。/ [5 `4 a' L* F% R

    0 ~; h- q. T$ T2 v2 u  Y! S
    3 B- _, ]' {$ @# m
    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-9 00:13 , Processed in 0.544700 second(s), 55 queries .

    回顶部