QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    6 o# s2 r. I4 v一.实验目的:7 y2 W/ A( l/ z! M, ?1 c! q
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;& |( c- d' X! j' v% ^0 ?
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.! C; o5 K* Q7 f" g) l
    二.实验内容:
    + @8 C# P7 e3 z% {7 X- r要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    & f3 Z% f/ G4 `- ]& c为方便计,1km主管道钢管称为1单位钢管.2 m' n. M& o" u  n: s
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:
    3 R8 b4 z+ _  E9 x- S  D1 i# Y: S
    9 I2 P0 D6 b0 ]. X1        2        3        4        5        6        7
    . ~; E# P0 S, a" b  ^! t 6 ^, r0 L9 s5 d# M: H3 `- H0 g. `& p
    800        800        1000        2000        2000        2000        3000% F' ^% i8 S$ E' ~
    4 s( Y5 P2 g; \) g: G' U$ W
    160        155        155        160        155        150        1603 `: w1 q' S$ D: u4 D" p, h$ T

    1 N8 x9 L" Z# H8 [5 V( p1单位钢管的铁路运价如下表:
    5 R. m$ B+ K7 d/ u5 i; U里程(km)          300
    # D* B+ U) `( b8 @4 V; v9 Q3 S301-350        351-400        401-450        451-500/ q$ K2 ]* Z. o2 t. U2 l
    运价(万元)        20          23          26          29          328 ^. f9 i2 x8 `' f
    里程(km)        501-600        601-700        701-800        801-900        901-1000, f. f  `& p( c, z% A
    运价(万元)          37          44          50          55          60+ Z: ^# L; s3 X
    1000km以上每增加1至100km运价增加5万元.' V/ i8 X! n9 V+ `
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).  l/ ^) P& q3 \5 E7 l" M
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.3 c3 ~3 p, ~1 B6 c3 d

    , M& W* ~9 L3 N9 W& V试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    ( w9 ^4 E+ V' Z2 K% J三. 模型建立7 k# V6 V  T# z# w2 c1 o
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :
    - }! q' \8 [/ R& m. Q( G. K# W " K. w$ ]% J! r$ z9 G- s  K
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离- p7 F0 ?4 g2 a  f
    , ^4 E9 G- `2 g' J9 x; B8 \1 c
    解:先写出带权邻接矩阵:/ o4 d" P; P! b
    ; i& R+ W* ?2 H# f5 @4 `# s
    后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .( C$ a6 x1 r- }! v' f
    四. 模型求解(含经调试后正确的源程序)
    8 B: e, o" V: `& n! N2 N(1) Dijkstra算法9 b! w9 Y3 j* p4 q& O2 G' W
    road1.m文件源程序:
    ' _/ J) b- c" vw=[0 1200 inf inf inf inf inf inf inf inf;
    % k' D. @: ?8 \4 G, h1200 0 12 202 inf inf inf inf inf inf;
    6 f' f5 u* u: K- `/ R! O" `( qinf 12 0 inf 201 inf inf inf inf inf;
    0 D1 C8 b' a) V! w; n, M+ o/ {inf 202 inf 0 31 20 inf inf inf inf;
    ' R0 R" o# _7 i' H) V) J3 Q9 U) {inf inf 201 31 0 10 inf 205 inf inf;
    , l! ]$ N9 y5 C5 [inf inf inf 20 10 0 195 inf inf inf;9 ?8 k2 }, A9 E8 m! b# T3 |. j& U
    inf inf inf inf inf 195 0 5 306 inf;1 f8 y  k$ w" F# D
    inf inf inf inf 205 inf 5 0 inf 194;
    * H* I, @& J2 ^! C( jinf inf inf inf inf inf 306 inf 0 10;0 }' B5 h* m7 ~' w/ V0 b" {1 D
    inf inf inf inf inf inf inf 194 10 0];
    : j- M" _2 ?4 t5 ]! ?& W& ?n=size(w,1);
    ; Y5 M$ }/ q6 k7 B2 [w1=w(1,;
    : j8 S1 v( [8 R" Q& Ffor i=1:n' a1 o" `4 B* t
        l(i)=w1(i);1 w0 f  ^1 A5 U+ S$ |- s) @+ J
        z(i)=1;
    ! \4 n/ T; h+ T4 _end: U9 F: F1 Q7 A5 N5 x0 Y* e
    s=[];
    8 U5 e6 |4 `: L* m" ls(1)=1;
    ( f: q. p% f" b6 qu=s(1);
    & w6 w7 }# D- t+ g2 v) |- P# m$ |k=1;
    ' K4 _) f' X7 S0 l7 L1 jl;
    2 y- I" u* z: {& U; [z;' J( K1 _( L0 u  q
    while k<n
    0 f2 l2 l  }2 B; l+ n8 c" y# H    for i=1:n
    6 r6 F- M9 \9 V9 S4 `9 _    for j=1:k
    3 ^2 `9 \% r% M- o       if i~=s(j)
    / @* y/ T; R" |% S          if l(i)>l(u)+w(u,i);
    $ x! x) q* C/ R             l(i)=l(u)+w(u,i);, j+ Q3 {' X* W
                 z(i)=u;$ t. T. K  Y; Z
             end
    ( G- R/ Z5 t: b: g7 }# [     end
    8 D+ |2 ^6 d2 D, W0 O end0 P) l) U$ x+ q- l" C& z
    end
    3 `: H2 z  T2 z$ W% L; q1 Z! J8 Z l;
    % c9 R7 d& z) k6 z- b3 e7 K3 l z;
    $ v# d' B: J, ?ll=l;0 F" m( B$ V6 ^8 c* ]
    for i=1:n
    6 ?8 g8 `) E2 F$ v- U# s3 i for j=1:k
    " K1 L3 p3 O, j2 n    if i~=s(j)
    / |  ?+ T# o4 H7 T       ll(i)=ll(i);/ s8 S0 b: m" l. d6 `
       else) W( _2 t- H% `; k  o' }
           ll(i)=inf;
    " r7 F6 W! y2 Q, {! z   end
    6 }' c2 H7 Q# n. ?6 V: c4 h7 {1 g+ tend
      E/ h- y" l3 v7 @' B0 ^end
    9 `# p0 p' h  U  |lv=inf;
    # w, Z/ K+ ]8 }" b1 E, R8 Ifor i=1:n
    % K% c  L2 p9 E3 c) m& P    if ll(i)<lv
    ! E% v$ z! s+ K! e% u. G) f       lv=ll(i);0 T/ k/ \) r4 C
           v=i;$ X# z7 }. S) l, T/ ^; W1 i
       end+ T0 X  Q$ T6 c6 H! `& q" k
    end/ {, r% Z; U. F% f# v& Y# L1 ]
    lv;. y2 i2 D# q; }/ ?  y
    v;/ p# `$ T1 u, C9 R/ T" A) J
    s(k+1)=v;7 G1 \- F# ?9 U; V& y/ K1 d
    k=k+1;  R# k" N6 ~1 @1 q
    u=s(k);
    9 s3 H7 |, q% t2 K1 xend
    / ~( b0 J1 ?! b- V* Xl
    8 U8 C1 }3 f# S' _. oz
    9 g: S. A3 w& a
    1 B, U8 u# e& L  V% Q! u. |* g(2) Floyd算法# r% l1 ~" H( J% t; ^
    road2.m文件源程序:2 y6 V" Z1 J: k4 A' \3 u0 `' v
    a=[0 1200 inf inf inf inf inf inf inf inf;
    9 G9 S8 z- K$ ~9 d9 c6 C1200 0 12 202 inf inf inf inf inf inf;
      v) [! ^! C! o: {" Cinf 12 0 inf 201 inf inf inf inf inf;
    2 _. m2 X9 w3 u2 I3 R, @inf 202 inf 0 31 20 inf inf inf inf;
    ) w) H  r6 U$ j; Dinf inf 201 31 0 10 inf 205 inf inf;
    1 M) v+ {7 b: e; p& t! O8 \inf inf inf 20 10 0 195 inf inf inf;
    * f- I3 u1 `+ Q$ Q3 B# iinf inf inf inf inf 195 0 5 306 inf;/ r' I# t' g) d4 z: Z
    inf inf inf inf 205 inf 5 0 inf 194;- Z7 e  U0 v6 W" B0 d8 z; u/ E; J
    inf inf inf inf inf inf 306 inf 0 10;' R! h3 @; x! u0 ]. J' n3 {  U) t
    inf inf inf inf inf inf inf 194 10 0];; j4 q" q8 f% o- B) g
    [D,R]=floyd(a)' @6 d+ T1 J; T( [; S
    floyd.m文件源程序:
    0 }# z9 D% X; J' x; Nfunction[D,R]=floyd(a)3 a8 a8 }9 a+ Y6 {; K
    n=size(a,1);
    6 N. J9 ]! I! O" a2 yD=a7 v' v* e  m; J. Z1 A
    for i=1:n
    ! f: S; I) E4 b    for j=1:n" P0 I4 p* A; F0 y0 H
            R(i,j)=j;
    1 p) \/ s$ @! g4 k! B# X: Q( g2 k    end
    - h' _6 a( n: L  u8 Zend7 ?- H9 D! a4 W9 x, o& C
    R
    2 e) y" {# b( Z: y% v: ifor k=1:n3 j1 ?* y, u3 a: A
        for i=1:n
    # a* V- a4 H; j! \4 J        for j=1:n
    : E; \* L8 M. ]& F. g  G            if D(i,k)+D(k,j)<D(i,j)2 G& Q& p3 l3 m/ {" U/ Y6 _
                   D(i,j)=D(i,k)+D(k,j);* R+ ?/ w$ C! C1 I7 g
                   R(i,j)=R(i,k);2 t/ H2 R- }* O+ w- i
               end
    , S" \: s: S# r       end
    $ A# D5 V: E% ~8 m8 i) s   end
    : C% `' W" P# d" h2 [/ m   k8 b, f- b/ L. b! @2 E; t( \
       D
    ; R" H( D# B' \2 w5 v" I* ?3 a   R
    ) q0 j( Y! y2 k. h1 w+ x: @end
    # ^3 K- N; z$ A! u' s五.结果分析
    ; o* A& K. N/ o$ j% N9 E(1)Dijkstra算法
    $ \/ N2 o( g0 ]' o运行结果:
    $ ?) u3 x, Y# A4 Bl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
      w( e& ?0 B% ~+ Qz =1     1     2       2     3       4     6      5      10      8
    1 _3 Y6 Z# M/ e
    / X* r1 ?! G1 {结果分析:% r" k' k0 ], X2 X) j0 d% K; U6 o
    通过运行结果: 到其他顶点的最短路的权 ,可看出,9 _$ D% p' [. V4 o2 H
    到 (即 到 )的最短距离为1812(km);
    ) [7 l, ^" H; F4 Y. T3 g 到 (即 到 )的最短距离为1618(km);" A6 z/ Y/ [1 C/ o6 U

    / h! ^+ u7 s  Z3 o) O* B 到 的最短路径为:V1→V2→V3→V5→V8→V10;0 v, U7 q0 L1 U& `3 C8 q: k9 t
    到 的最短路径为:V1→V2→V3→V5→V8。) V# h; X2 f! g4 c$ }
    / _; i2 J, T8 U; u
    (2) Floyd算法8 O6 g9 Y4 Q! f
    运行结果:
    ' Q/ t$ C! L: {& n4 ]/ n& X5 _$ J, yD =
      ]8 `* v! B% u& L1 c& W     0  1200  1212  1402  1413  1422  1617  1618  1822  18120 h5 l) b( p9 y9 L. [
      1200     0    12   202   213   222   417   418   622   612
    % }* ~: b8 D  y0 \  w  1212    12     0   214   201   211   406   406   610   6004 U" T* A7 O7 `& X6 r
      1402   202   214     0    30    20   215   220   424   414
    ! B: B! {6 F& U( F! z  1413   213   201    30     0    10   205   205   409   399
    & ^& O! N% D( ?, J4 [( L1 l; T  1422   222   211    20    10     0   195   200   404   394" ~! X4 s8 G) O
      1617   417   406   215   205   195     0     5   209   199
    , {9 w& b' ]" E2 r8 _8 M, P  1618   418   406   220   205   200     5     0   204   194
    + F% \7 k5 @# k" Y, \  1822   622   610   424   409   404   209   204     0    10
    4 G) w- {4 O- \' r" z) Y2 }/ Y  1812   612   600   414   399   394   199   194    10     02 I' ^4 I0 h( g& j
    0 o" S. f$ i4 \% f: k# X2 \# H6 u
    R =
    : ^; p3 N# f) D" N  B   1   2   2   2   2   2   2   2   2   2) I0 ^! y2 }* B" E3 T
       1   2   3   4   3   4   4   3   3   3
    $ C5 v' s& M, S# K/ I   2   2   3   2   5   5   5   5   5   5
    6 y) k, M. M) D. y6 ^   2   2   2   4   6   6   6   6   6   6+ j5 y& h* K' h1 S* v* J; B
       3   3   3   6   5   6   6   8   8   8; n7 [, q0 |$ C  C; |# t! M
       4   4   5   4   5   6   7   7   7   7
    + x- t+ D% U7 R1 X7 o   6   6   6   6   6   6   7   8   8   8  T( q$ l; X7 e  k% i1 {
       5   5   5   7   5   7   7   8  10  10
    / @- I: ]% d8 e  10  10  10  10  10  10  10  10   9  105 @0 \7 q0 ^( z7 f$ Y
       8   8   8   8   8   8   8   8   9  10
    7 _7 [( f$ D: |1 w6 ~5 ^结果分析:7 w: A/ N- H' e7 U3 W! u
    通过运行结果:可看出,  [# \0 M' g2 s$ f$ J7 Q
    到 (即 到 )的最短距离为1812(km);
    + a% o# a) f" n& I 到 的最短路径为:V1→V2→V3→V5→V8→V10;1 Y$ }3 f6 t9 X" S$ S
    到 (即 到 )的最短距离为1618(km);2 [( a% j: H7 F, C2 {; d/ |8 X
    到 的最短路径为:V1→V2→V3→V5→V8。
    " M% {" G5 B; G3 u+ f; k; I
    9 z' l& B( p7 Z
    ) Q6 d! B5 W. I- z  \3 S) e
    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-9-13 22:38 , Processed in 3.115390 second(s), 55 queries .

    回顶部