QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    4 y- E1 V3 a4 `* K' e一.实验目的:
    * t( q; E0 b! a1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;' o# m% U( C% B9 I- Q4 e: e
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.' r0 h% C- H( ?# E% W
    二.实验内容:
    2 z% G' {1 ]5 B1 _+ B' p要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).$ o4 |" J( J8 B) [$ A
    为方便计,1km主管道钢管称为1单位钢管.
    # E9 s3 k0 l7 [' B/ t一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:" |7 K/ {' v. @, a
    4 o% D- b0 K5 u6 `, e
    1        2        3        4        5        6        7) Z/ V$ h! P9 C& r# I) o! D( e
    * w$ w/ a9 b* w! E% Z
    800        800        1000        2000        2000        2000        3000
    - j- M9 g0 U/ ^3 x+ x
    . v! o; `. C/ y; `. |0 C7 r: H160        155        155        160        155        150        160
    2 }2 V0 ?5 U/ Q3 w
    8 I- L0 W* e% p& {7 ^3 v% p4 H+ K# F1单位钢管的铁路运价如下表:$ P: S; B  G7 C& \- Y
    里程(km)          300/ S4 C8 Q; V/ `6 ?
    301-350        351-400        401-450        451-500
    8 E! F: m3 u8 W4 b运价(万元)        20          23          26          29          32% L: e6 P( y0 K8 F2 }
    里程(km)        501-600        601-700        701-800        801-900        901-1000, j- O7 i. V, i0 G& Y* A
    运价(万元)          37          44          50          55          60, C, f+ w: V) T- g7 r
    1000km以上每增加1至100km运价增加5万元.% J  U( }/ J+ Q, u1 c" e# [0 q
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).- x: H! ~* |- z- @2 v
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.# O: N2 I- {5 Q9 S# A! u! [5 V' I
    " y$ Z# z0 X8 a4 d
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    " W) h: o& r. u! i. ?. V三. 模型建立  S  Z" ]5 y, v) a  ~- k8 E% W, V
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :) `. _0 Q, _& J3 ^  }5 T
    + T0 R1 V' }' N2 M3 N
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离) I% v0 k8 j2 C' T* E- b; q" k: j
    - Y& a; d. ?% p( D2 W2 `/ S& T
    解:先写出带权邻接矩阵:
    $ G: m  o- R& I. V; Y
    $ H0 z& J6 ^* |后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .  d8 T1 O- E# m8 A
    四. 模型求解(含经调试后正确的源程序)$ Z9 O* a9 Y& |, b
    (1) Dijkstra算法1 x- A  E! T/ ^( J: |$ z4 k
    road1.m文件源程序:
    , [! f9 m% j0 v, c& o# Yw=[0 1200 inf inf inf inf inf inf inf inf;7 d! c" q# l( Y2 T. B
    1200 0 12 202 inf inf inf inf inf inf;, g8 r3 E0 Q( L. E, o; i$ ]: P
    inf 12 0 inf 201 inf inf inf inf inf;
    0 y. U" F7 V8 P2 u, minf 202 inf 0 31 20 inf inf inf inf;1 f" y+ ^3 ?% U9 s% |% l
    inf inf 201 31 0 10 inf 205 inf inf;& }) O7 I; F  l. E/ a1 k; U# B
    inf inf inf 20 10 0 195 inf inf inf;
    + @$ h7 a7 ]3 |# Linf inf inf inf inf 195 0 5 306 inf;
    4 q, P% r) v0 s# o8 K+ Vinf inf inf inf 205 inf 5 0 inf 194;: A& z+ j9 }, g$ ]; C
    inf inf inf inf inf inf 306 inf 0 10;' ^* X- C0 W2 h5 t6 Q) ]9 ?
    inf inf inf inf inf inf inf 194 10 0];
    / W) G1 B- L- q' a: t9 In=size(w,1);
    & r( U+ J4 v  F) T  Hw1=w(1,;
    0 y% v6 _' |; ^* ~# W, Gfor i=1:n' x0 H% V0 }+ {6 u
        l(i)=w1(i);
    8 `! X# x0 O. Q3 Q2 d    z(i)=1;# @, ~0 i* I9 b) F6 x* Y. F7 O; C( Q- |
    end
    ( T# G  @1 M% i( ^, z2 h% ws=[];
    ; ^: w8 G1 l1 \5 i+ o3 _. ]0 hs(1)=1;
    4 m0 G, m+ {! x: G* i, Hu=s(1);1 @% k, Q+ O$ J' B
    k=1;8 L+ ?0 t& ^3 C, h: K7 @+ O
    l;, o( X. V0 ^6 N6 x
    z;1 b; n( U$ f3 u' K: D+ n* h1 C
    while k<n
    8 `5 a# r0 a6 s! q- A    for i=1:n7 W2 M; |% h, M% H% k5 U
        for j=1:k
      O/ U$ t9 s- l/ Y* O       if i~=s(j)0 z( G+ v6 m! X# }( j6 ]
              if l(i)>l(u)+w(u,i);
    ! m  J+ [5 Z1 y5 E1 X4 O             l(i)=l(u)+w(u,i);
    6 L0 x" \7 I! X9 W0 y; N) y             z(i)=u;1 u# V8 l8 I& T0 l+ U- b
             end, C5 B; h, I0 o$ Z  A; `  F& X
         end
    : M2 c  ?6 K6 @& O% Y. {$ W end
    ) E0 k+ i2 j' |2 k& O$ G' i0 R# nend
    * M2 Y' y/ }) I- S+ m' ~ l;! i' S9 d1 ]' q+ l, w
    z;3 H) G, `, ~6 q9 H. @
    ll=l;
    + T; ]" I" `% w! t  A& M for i=1:n. x- i2 v3 t2 F1 m8 |$ S& H. K
    for j=1:k3 T0 T: ^& [6 V; _8 J) v
        if i~=s(j)% o7 `. @! M5 ~8 k; w
           ll(i)=ll(i);/ L) M( P$ ~" K8 q
       else
    - L+ B5 R. F) Y3 H! [& z5 I       ll(i)=inf;
    . ^; k! s9 ^& k5 Y   end
    8 B5 ?1 U' Q" ^* r! P* v( Hend" o4 A0 `8 {( t8 N$ a' D4 W7 d
    end) g, h  b, Z  N; _% N2 }
    lv=inf;
    # C+ c, S0 E$ F( @1 Ufor i=1:n8 ?' D, J& k6 n: d3 H! O9 v
        if ll(i)<lv
    ! w$ l2 q3 K" g$ j       lv=ll(i);/ A2 A! Q4 T0 }! M! f; T. }
           v=i;
    % C' X/ |9 f2 o, l, r3 A! F3 x   end3 l/ Q) n; R- E, W* ~4 C
    end
    8 F0 T# V6 n2 [+ ]lv;
    2 I0 S# U# R4 Fv;" Z& c* b% b3 T: m% z' d5 |; Z; H
    s(k+1)=v;
      l- d) X; u9 q% xk=k+1;
    - V6 U& X# b+ e* b; A  I7 Q# m7 du=s(k);% u, q! e6 M! c# `% k& i
    end
    $ G9 N# m/ u! l7 E) y5 El
    ) }& O, _" F. `: c+ cz
    & H( f+ f1 T* K5 K: {( T! j, U- ~4 R  H9 c7 _0 J: B' I1 L
    (2) Floyd算法
      y' n* D, c# Q  K8 Nroad2.m文件源程序:
    1 ^! y3 e9 U! O7 q, |- m) Q! [a=[0 1200 inf inf inf inf inf inf inf inf;  L  z! X% N' q! b
    1200 0 12 202 inf inf inf inf inf inf;
    6 _% c( c3 M+ z( Y6 dinf 12 0 inf 201 inf inf inf inf inf;$ Q1 H( e: s8 V  U4 o: [: A& `1 [; O
    inf 202 inf 0 31 20 inf inf inf inf;
    $ j, D! ?5 y. W; @8 r" Z/ N- h- ninf inf 201 31 0 10 inf 205 inf inf;& X+ K' A6 s0 }9 [1 b3 w
    inf inf inf 20 10 0 195 inf inf inf;( n8 M  H) W4 k& x
    inf inf inf inf inf 195 0 5 306 inf;* c- s1 e8 ^6 }
    inf inf inf inf 205 inf 5 0 inf 194;
    7 i6 j) r. M) j: D+ linf inf inf inf inf inf 306 inf 0 10;4 ]" E+ K' l& b+ m7 u
    inf inf inf inf inf inf inf 194 10 0];$ i  N- ?$ R+ T: y; k
    [D,R]=floyd(a)
    4 w8 a' j  T+ i, w, |3 l; Cfloyd.m文件源程序:
    ' f+ ^$ d  d& b. f0 d9 F' ufunction[D,R]=floyd(a)
    0 j' y$ ?7 ?* Q3 bn=size(a,1);
    ; x6 k, Q0 I# C- Y( LD=a
    ' U+ R$ ^5 X4 t- o% Yfor i=1:n5 g7 p7 Q2 F( g
        for j=1:n- J2 |8 ~2 |$ ?0 T; X& q. b- O
            R(i,j)=j;* ~7 J: s" n1 L; B1 H& b
        end
    $ k% L# Q7 u4 i! z) Kend: T( x8 H2 c6 E
    R
    ! i; S; t0 A- \: @) L6 t, f0 Tfor k=1:n- Q, N7 v6 g4 p8 h
        for i=1:n7 b; Q- o9 k  h# H
            for j=1:n+ u& e4 E3 \3 S1 V' ?4 l
                if D(i,k)+D(k,j)<D(i,j)
    7 y, u$ j' T) W: z7 |               D(i,j)=D(i,k)+D(k,j);
    0 o, |  }) c3 a1 P2 ]7 Z2 V) x- \               R(i,j)=R(i,k);
    $ M, R! E3 E  M; o           end. z/ S3 i1 h* r: g; f4 j$ I
           end. d4 `0 V, M7 n# }/ e
       end
    - v4 C, h" U5 U   k2 ~) u: c/ u+ Z, f
       D9 u% r) m$ M/ f
       R
    . l$ i6 o7 A" ~& \2 [1 Wend9 y; @$ n1 W3 w. b2 F
    五.结果分析
    4 E. Z9 P8 D0 H1 c3 _& U' J2 N(1)Dijkstra算法
    8 V! G2 E! E( q  @# e/ c运行结果:
    * I  A* x. L) cl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812# I; Q8 Z9 k6 w# C
    z =1     1     2       2     3       4     6      5      10      8
    " S! V" z2 r! n" s" ?* R 0 i$ S: B+ D. q# N; ~4 ^
    结果分析:
    * ?: M% y+ y6 T3 b: C) g通过运行结果: 到其他顶点的最短路的权 ,可看出,3 @7 @8 q3 U" z7 a* c. O
    到 (即 到 )的最短距离为1812(km);8 \3 b! f$ t- |( Y) Q3 x" P
    到 (即 到 )的最短距离为1618(km);
    0 t2 U  B6 k9 d" d8 z$ R% F
    # ~5 t/ h. t; a. @. p9 b 到 的最短路径为:V1→V2→V3→V5→V8→V10;& n3 p- `: ^& |( c% u
    到 的最短路径为:V1→V2→V3→V5→V8。
    7 H; p- Z1 \3 W( G4 j
    2 `+ Y" s8 a, D8 f# y(2) Floyd算法
    ; o# W6 b( U# ^( Z3 b! M6 k运行结果:- l! j% Y* O3 U  @- d1 {; M
    D =
    / B6 y7 o3 q4 j7 x# ^$ R5 y6 p     0  1200  1212  1402  1413  1422  1617  1618  1822  18126 j8 H- ~) f1 D- v$ \
      1200     0    12   202   213   222   417   418   622   612' b4 W5 l$ L5 G
      1212    12     0   214   201   211   406   406   610   600
    * C( O2 e( K: i( R  1402   202   214     0    30    20   215   220   424   414
    : R( ~3 W. A' ]. t( O: t* s) T# Q  1413   213   201    30     0    10   205   205   409   3999 V  U" ^9 Y5 K5 P, X
      1422   222   211    20    10     0   195   200   404   394
    ! p; q. O( \6 _! R* W, O# ]+ L9 Z# I  1617   417   406   215   205   195     0     5   209   1998 V9 [; F8 Z& _
      1618   418   406   220   205   200     5     0   204   194( ]5 |1 Y8 t# p7 n) i8 T. A$ Y
      1822   622   610   424   409   404   209   204     0    10
    8 l% @9 M0 T; \  ^" C& n; y  1812   612   600   414   399   394   199   194    10     0
    ' T" L) W1 {. M
    * s, R; a% u: Y7 D. ]R =
    0 u9 e$ Y+ p. Y, f8 R0 S" S0 q   1   2   2   2   2   2   2   2   2   2
    7 [+ r- _/ k" F   1   2   3   4   3   4   4   3   3   3
    . `6 E8 l" l$ H" D: p7 k7 n   2   2   3   2   5   5   5   5   5   5
    3 u: R% H$ n* C   2   2   2   4   6   6   6   6   6   6
    / u' M: E: G5 o2 O3 v% T& [- B; U   3   3   3   6   5   6   6   8   8   8
    - i1 |" U6 T% }; `+ r! L2 W9 r" _   4   4   5   4   5   6   7   7   7   7
    " y4 J, J1 {: f" K3 b$ g   6   6   6   6   6   6   7   8   8   8
    * u7 {3 o0 A: ^/ L5 P2 Z# j   5   5   5   7   5   7   7   8  10  10
    ; B3 I" E) h2 b" `  10  10  10  10  10  10  10  10   9  10
    / A  V5 p9 N, D5 x: z7 \   8   8   8   8   8   8   8   8   9  102 E1 I2 W- \0 i2 t% n9 m
    结果分析:
    7 X. r3 P; L' ^# z" y/ G通过运行结果:可看出,, Q; e; |8 c; y+ _3 y
    到 (即 到 )的最短距离为1812(km);2 ~7 h8 a. L) Q! e% j8 o9 d6 K
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    6 Q3 ?) d6 V3 n, S2 E, B9 G! U 到 (即 到 )的最短距离为1618(km);2 Z" k4 ?# M1 a, N
    到 的最短路径为:V1→V2→V3→V5→V8。  w' j6 p* ?; x  P+ u" h  z
    % T- _) D7 [( d# F3 O

    5 e9 y: ], _, J. k6 g  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, 2026-4-12 09:47 , Processed in 0.373660 second(s), 55 queries .

    回顶部