QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    7 F+ A; e/ k* ?& B1 u! ^# n8 _3 j/ r一.实验目的:
    # I* Y! H# d) _- o7 K: M8 j7 I( p* }1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;( |( C( T) U% E6 M
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.) N! f8 F9 X* i+ Y) A5 f0 ^: e* d
    二.实验内容:3 B' y; F8 c, ~9 r" T5 A. \9 I
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).% _8 D$ t1 u7 R. r1 Q# g: q
    为方便计,1km主管道钢管称为1单位钢管.3 @7 u( ]* `1 Y
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:% {2 _! m9 u0 k

    2 b: L2 D6 h( m$ ?8 M1        2        3        4        5        6        7& [" D) ^3 F" e$ z, t
    . D: U8 |  F7 b0 [. t: y* o
    800        800        1000        2000        2000        2000        3000
    ( y; T; N1 M- x0 `7 `$ p 5 B, G/ b/ z1 }* R
    160        155        155        160        155        150        160& h1 b- T! Y7 D% ?3 ^3 K

      b3 o- w0 N1 r1单位钢管的铁路运价如下表:5 f1 T7 X* c1 A  V
    里程(km)          300
    # `+ A8 I! A2 J301-350        351-400        401-450        451-500
    5 w( f' X; S& x7 b: ^运价(万元)        20          23          26          29          32
      ?; S4 h8 }4 o3 A+ \: a! T' N里程(km)        501-600        601-700        701-800        801-900        901-1000
    - ]% Z1 m: R! l5 L: b运价(万元)          37          44          50          55          607 b8 n* i. w) _: ^2 W9 U% U
    1000km以上每增加1至100km运价增加5万元.$ I$ ?! {3 Y" m' ?+ ?0 e. |% I
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).
    0 f+ o1 [3 g0 d7 z2 ^假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.7 V  N( J+ `; h( n

    : E; ^( s+ m9 H% |: r试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    2 ^5 c% s# a& v- K& [4 O9 [7 H三. 模型建立1 H# k) @, H9 L
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    6 t$ \$ f  [9 q 5 k' l" y  ^% u7 ^
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    ; ^& c+ x; f; `; I" ^ # |( b; y- @. \1 x( {7 [& e
    解:先写出带权邻接矩阵:4 k6 [# P! _8 j0 y% ?

    " }' \9 C; B1 q; {) q! H后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .
    : O) i! |9 }, U+ L- i; T- L四. 模型求解(含经调试后正确的源程序)6 x5 |& A7 K9 U- b9 N8 b
    (1) Dijkstra算法: w2 x3 b7 q, M1 S$ u- ^5 a
    road1.m文件源程序:
    ) y3 f0 U) D2 Y7 t( u- ~% cw=[0 1200 inf inf inf inf inf inf inf inf;
    ; U+ o! q, S' ?1200 0 12 202 inf inf inf inf inf inf;
    ( R# ^+ V4 T' m1 h" A) qinf 12 0 inf 201 inf inf inf inf inf;" Z7 C7 O( G% U2 `+ r
    inf 202 inf 0 31 20 inf inf inf inf;
    : y6 k2 ]) D7 ?" y& b0 Y4 oinf inf 201 31 0 10 inf 205 inf inf;/ S3 A. `& k4 C% g9 g) p$ u
    inf inf inf 20 10 0 195 inf inf inf;' ]" Q* P3 n  [
    inf inf inf inf inf 195 0 5 306 inf;
    / {: O! X- r7 d  H0 g5 Minf inf inf inf 205 inf 5 0 inf 194;
    4 j! f8 I# ^0 y0 O4 M8 ~inf inf inf inf inf inf 306 inf 0 10;
    + m5 d, ^4 G3 d  g8 t+ einf inf inf inf inf inf inf 194 10 0];
    8 s2 h. t* A" z& o$ jn=size(w,1);- ?" u; _/ x2 w6 R& }$ M
    w1=w(1,;' J7 {8 ?0 p0 o1 [0 i% I
    for i=1:n
    1 F, k. ~8 \& D3 S    l(i)=w1(i);
    5 [, P% j# u- z( h/ N    z(i)=1;- v" n9 T2 O. h
    end
    : r! o- B, r; N6 rs=[];! P, G. @7 b, Y7 ?
    s(1)=1;
    ' B1 u- t0 o- j- a7 Z, bu=s(1);3 E. W/ F7 p- a
    k=1;
    ( x: r" R! ]3 d4 k3 ?6 t: fl;: F# s; A. u. @. Y1 d/ \9 u
    z;
    * c4 _& k& H% t0 O$ xwhile k<n" O+ j' k- a9 u" `! q& d" ~
        for i=1:n
    9 c0 f3 c* B: \6 U    for j=1:k
    + @7 x5 d( r5 ?0 @$ w! j+ Y       if i~=s(j)
    + d) E0 I/ B& M$ w2 R6 j  y          if l(i)>l(u)+w(u,i);" j- c# d2 g% I9 Y4 D( m
                 l(i)=l(u)+w(u,i);
      H1 [! \' [" a, D% W             z(i)=u;3 N, ?  \; v$ q% U; }8 P
             end
    2 b8 b  t" I/ `4 |# n  H     end$ o4 u8 ^( {6 h9 \1 O7 C
    end
    9 Y" E' S9 k: Q" Iend/ g0 L" M1 \. h2 F7 f) i" D$ D
    l;
    % [8 [5 z( }( L- L  G z;
    , T6 l1 X1 P5 h. ?2 mll=l;, e% V  q. x% G, C
    for i=1:n
    ; \' J' e  i9 h1 O for j=1:k- H0 _8 P3 q6 q1 }6 l0 a! W
        if i~=s(j)
    , M% s* Q- \0 q/ R       ll(i)=ll(i);
    ( R# E+ l% u  I   else  D6 [8 a' B; K5 O; T
           ll(i)=inf;. s7 M5 G- [: J/ o( M; m  y' I
       end" g  a  L# F  W6 l  S
    end; V$ T' Y, T/ l' R
    end
    / J! |5 n. [4 X+ flv=inf;0 I7 {" ]! u. |
    for i=1:n
    " o  K' B( L6 P    if ll(i)<lv
    ) N  B" p- S' c       lv=ll(i);, b1 S# I  n1 R( w+ C
           v=i;
    + m; F) a+ }6 {$ U# U   end/ |0 k2 Y/ C: L" O+ p- }7 ]2 W
    end
    3 B1 t/ o9 W" a$ [1 {lv;
    - M" k' C9 b) E; L1 Q( }2 f! Nv;1 |+ J, X% I& Y, m2 O. n- v" V
    s(k+1)=v;* m9 f3 c$ @1 d' @+ j
    k=k+1;
    : z. e- c; u, z2 h& Z: iu=s(k);. l5 o" _1 J9 G( A+ K# S/ n8 n
    end
    9 V4 |' E# Q9 o) b% w2 ]l* k- n0 g' A1 \! t
    z; r1 j0 B2 d" A7 B
    . |" H% v0 v# I- \) |$ C- w1 |! Z3 [
    (2) Floyd算法* c3 @6 L3 {2 k
    road2.m文件源程序:* O, N8 W8 {. L+ P( b0 |8 F
    a=[0 1200 inf inf inf inf inf inf inf inf;8 J9 G2 k% }$ E8 Y- M2 Q4 u: l! k
    1200 0 12 202 inf inf inf inf inf inf;
    $ o7 Z+ n1 c% j  O4 Q  b! Yinf 12 0 inf 201 inf inf inf inf inf;! E+ {1 f9 n) Q
    inf 202 inf 0 31 20 inf inf inf inf;
    0 i! }& b; z2 `1 `5 Cinf inf 201 31 0 10 inf 205 inf inf;% Y3 ?3 u* n2 o8 G9 [; c
    inf inf inf 20 10 0 195 inf inf inf;+ {8 {& P2 Y6 h  h% _; ~+ @. D! e5 S
    inf inf inf inf inf 195 0 5 306 inf;
    - N2 Z4 N& I* f) \! i: Cinf inf inf inf 205 inf 5 0 inf 194;
    % c- [0 l/ @) U& a& ^inf inf inf inf inf inf 306 inf 0 10;. G+ G5 E( x+ z$ Y5 i9 _% t% J: u/ B
    inf inf inf inf inf inf inf 194 10 0];
    5 R4 S; E# M$ \; U$ X[D,R]=floyd(a)+ Z! s: y1 c$ U9 z, e' J, m  r  c+ N
    floyd.m文件源程序:) z2 J' m9 k2 O/ M; E: q( `  @
    function[D,R]=floyd(a), X' N# ~! e# d: d) t9 h# T
    n=size(a,1);1 Y! f& K8 @9 M" o
    D=a
    5 f" _9 X- X0 K/ Pfor i=1:n
    4 o. W6 V. L# E$ X4 N! Y4 N* ^    for j=1:n( f) ]& d8 |5 Q
            R(i,j)=j;
    " D3 q1 Y+ Y3 D/ }, Z    end
    ' U3 I$ D* g0 f, t4 |end
    0 t# S/ ^, N) R& X1 {$ T# zR; e9 z( k# B2 Z5 o$ T
    for k=1:n1 h# v% X3 t" |/ e; E5 v
        for i=1:n
    $ `! f  @% p) O. Q, Q        for j=1:n0 B, Y3 @! L3 ~  ?1 {- a+ w; c5 [0 s
                if D(i,k)+D(k,j)<D(i,j)1 s* W) y1 g, p6 ^% k% k3 D/ A0 `
                   D(i,j)=D(i,k)+D(k,j);
    & a. K; z# U  P( K9 u" H               R(i,j)=R(i,k);8 Z# X5 w  A5 ~/ B$ K
               end
    8 M6 Q/ d1 C6 q       end# J: ]% i4 v) b, Z4 M9 I
       end
    : m) e% `6 g* q   k
    % O' Q3 x% k& i/ E# F! ^   D
    ! j' S: w6 Q5 ?7 k0 l2 a6 x+ ]   R
    , r& n" y- q: j/ K& s) Send
    $ d# C  ], \" W, O: v9 I+ W& I1 H五.结果分析
    - ?  `5 F3 _9 W4 E8 s9 m- Q(1)Dijkstra算法7 Z8 n8 A4 f9 @$ x2 {# C" Q, P, |
    运行结果:
    , ]1 D2 R3 m5 n  h1 ll = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    ( O2 P  b% |  b* q' Iz =1     1     2       2     3       4     6      5      10      8
    6 q) Q$ L7 ~8 G. [, l$ P* ~
    ( D) e$ ^- `/ I1 d+ Y# k( M结果分析:2 }; W' D- M; K
    通过运行结果: 到其他顶点的最短路的权 ,可看出,
    + n- I( I. s" u! Z  L7 C! L, w  p! O$ G; T 到 (即 到 )的最短距离为1812(km);
    * Q' D+ A. b( u3 V- ] 到 (即 到 )的最短距离为1618(km);; m$ }7 C7 l5 f  Z  ]
    & Y. w/ I  @7 K+ v
    到 的最短路径为:V1→V2→V3→V5→V8→V10;. d9 ~/ F$ \. U4 q  `6 q, T
    到 的最短路径为:V1→V2→V3→V5→V8。- T& G2 v: X$ N5 Q& f3 H

    ; h6 D5 H+ \$ ]( e( R(2) Floyd算法
    * M" l+ }, X0 U! W1 P3 O运行结果:6 X; }$ }2 i8 u* C) K9 U9 W: t
    D =
    8 N* ?, L; Z! Z( `. Z     0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    ; [6 S3 v6 p, L! A+ v7 W; B3 J( ^  1200     0    12   202   213   222   417   418   622   612" S" h: x* S( Y* A, {: V/ ~
      1212    12     0   214   201   211   406   406   610   600, Q5 y5 J+ C0 z; I. I
      1402   202   214     0    30    20   215   220   424   414( J7 Z8 H- }( m% E% p$ |- k
      1413   213   201    30     0    10   205   205   409   399  V" @. L: ?0 s9 ~
      1422   222   211    20    10     0   195   200   404   394/ k2 g5 B% H: A# [" A2 L9 G* N# _
      1617   417   406   215   205   195     0     5   209   199
    2 W& _7 Y9 O! @  1618   418   406   220   205   200     5     0   204   194
    0 b4 m5 ]7 a) m7 U# L% @  1822   622   610   424   409   404   209   204     0    10
    5 L; U0 D2 [3 k3 W& ?% k  1812   612   600   414   399   394   199   194    10     0
    . i/ [4 l) f# V/ u& ^4 t) S+ y3 L( L% |6 q; u
    R =
    % r  H: f- r3 O* a. Z" F( i: ?   1   2   2   2   2   2   2   2   2   23 q; h' L5 @) ?( v
       1   2   3   4   3   4   4   3   3   33 i: \" q3 k" _! B6 @+ W
       2   2   3   2   5   5   5   5   5   54 A" u: Z3 v6 ~1 @( V% a& `
       2   2   2   4   6   6   6   6   6   6
    8 k& i/ K1 u! w, J# o' D   3   3   3   6   5   6   6   8   8   8. q/ L8 u# @1 v; `
       4   4   5   4   5   6   7   7   7   7! w( U' @; b# `' j  U3 G/ ?
       6   6   6   6   6   6   7   8   8   8
    " b! W8 |  L/ ?0 S) }7 `; y" [   5   5   5   7   5   7   7   8  10  104 ?2 e4 L" l, }+ f9 Q
      10  10  10  10  10  10  10  10   9  10
      P8 F) g7 A# E1 m( V! a! ~: I7 J5 G   8   8   8   8   8   8   8   8   9  102 R! ]3 @& ~4 L/ F) A  ]0 S
    结果分析:3 _% X# C1 ~! y! q5 H
    通过运行结果:可看出,; Z1 E0 r; K2 l4 U5 g
    到 (即 到 )的最短距离为1812(km);" X+ P  P4 |8 c& |4 ~( s
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    7 q( x) \9 d$ k2 f8 @7 ` 到 (即 到 )的最短距离为1618(km);
    ! H4 Q% n. K2 y( p8 P 到 的最短路径为:V1→V2→V3→V5→V8。
    & \- }& m6 Y  C+ `5 g5 g0 k
    . b" E1 W0 Q! q  G0 g4 _2 B) k/ A6 l1 B/ Y: d( j; X& i
    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-6-11 08:22 , Processed in 0.314015 second(s), 55 queries .

    回顶部