QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法+ b0 n( e) t( o2 A+ T1 Y4 [
    一.实验目的:. K/ s0 l$ y, s$ [: \% h4 j7 G
    1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;; ^% a- y& R. g: ?3 Y6 f5 u+ N: ]% a5 F
    2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.- ?- \6 Z6 z% l5 D' ^8 M9 s- t$ b8 u. ^
    二.实验内容:
    % ]8 e6 P- U/ C2 Y6 s. T+ A要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).% e# c0 q- ~3 Q
    为方便计,1km主管道钢管称为1单位钢管.8 g8 C6 @$ D" y) x. z1 J
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:: m# Z5 R, J$ \6 q7 Q  T
    * G- [! j4 u1 S
    1        2        3        4        5        6        78 f  b$ @$ w- m. n

    1 C/ r9 Q# h- K2 R2 N% _; p800        800        1000        2000        2000        2000        3000
    9 c0 x) ]" n9 T4 ?% S2 N + V) n) Q! \; o2 c8 s+ I
    160        155        155        160        155        150        1601 }" R, T- a: V0 U

      b; D3 ]0 i( o( \1单位钢管的铁路运价如下表:, Q/ `6 t8 h* y, H
    里程(km)          300
    9 e3 ?3 Z4 \6 u# K1 e( S+ F) t301-350        351-400        401-450        451-500
    , d/ ~' Y" @6 Y' s/ M运价(万元)        20          23          26          29          32
    2 `, D# F* y9 n' D3 r: K# h里程(km)        501-600        601-700        701-800        801-900        901-1000
    4 ?! Z6 t. ^8 J& G' Z运价(万元)          37          44          50          55          60
    ! i" t+ S3 I; p, k1000km以上每增加1至100km运价增加5万元.
    ; y, o1 m8 f) I' l; n, S/ Z8 e公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).( U7 ?- V7 l) a( g2 {; N
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.6 h# e$ {& f7 @

    ' S3 [  X8 p! C7 O试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    " ~) `! R) X2 w& D% x9 u( M1 `4 \三. 模型建立& q( c) X$ W3 F7 {, k+ L4 K7 Y
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :( P4 h, _, S6 {0 P
    ) ?# R1 c- @2 a) _) _2 D
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    - r. S% U3 D9 P$ M& I
    6 m# I  P  w# p9 k' z解:先写出带权邻接矩阵:
    6 b- Q6 c% n6 \. q7 T% o6 X  f
    2 e4 m2 L+ Z' l# \" r9 w* p* U后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .  Z, b4 f- M$ w# `4 I
    四. 模型求解(含经调试后正确的源程序)
    1 F5 u5 s8 i, {0 J(1) Dijkstra算法: P9 B0 W; i; h1 c6 E0 q1 _
    road1.m文件源程序:5 d" n( L' b. I3 a9 n
    w=[0 1200 inf inf inf inf inf inf inf inf;
    : w" Y( v1 y( B9 v- p- ^1200 0 12 202 inf inf inf inf inf inf;( V+ H' z' m) \! I% ]3 ^6 }0 L; ]
    inf 12 0 inf 201 inf inf inf inf inf;
    " N4 ?4 l5 t, K' h! |  R; l% l6 @inf 202 inf 0 31 20 inf inf inf inf;
    3 E3 ^: z$ ]! }( }+ |- Yinf inf 201 31 0 10 inf 205 inf inf;
    / A  p, E6 s6 L/ V+ jinf inf inf 20 10 0 195 inf inf inf;
    6 _% ]( W- v2 |8 f1 V) D( p+ Dinf inf inf inf inf 195 0 5 306 inf;
    3 J. ?8 D) Y- Ninf inf inf inf 205 inf 5 0 inf 194;& Y7 ?# m1 b5 Z' `1 ^
    inf inf inf inf inf inf 306 inf 0 10;+ ~  d  e$ d: ~$ S! M: ~# _0 q
    inf inf inf inf inf inf inf 194 10 0]; " [4 D* `$ Z: G3 z+ Y
    n=size(w,1);
    3 v3 o. t: ]) e+ v  pw1=w(1,;  k, k) [; o2 ~1 b9 v* ]! }
    for i=1:n
    ' K* H2 [& o' c1 M6 K0 U* [5 u    l(i)=w1(i);6 `, D9 G/ M* t" t0 Q
        z(i)=1;5 }( R- k( ?5 T8 W
    end
    . W' F* I% P) N$ a. qs=[];0 f0 ]: }  P- E& q
    s(1)=1;
    " F6 h/ m7 l9 v' j+ |0 ^u=s(1);7 P6 ^: G) U0 v& q- k' I# q
    k=1;
    + [6 M( a* @- y, W* A) ol;
    1 a% w* ~9 A; D1 Oz;
    # v) ~6 L, t' A' Awhile k<n
    ( M0 s" C" U+ e( h9 S9 V    for i=1:n" [# V! S( ^) ?2 }
        for j=1:k
    1 `6 ^5 q! o, U% A6 f& Q$ F       if i~=s(j)8 f# E3 b# U$ H0 {
              if l(i)>l(u)+w(u,i);- d! t( ]  o9 H/ ^
                 l(i)=l(u)+w(u,i);
    9 K* m. ^. t+ j/ m             z(i)=u;5 I2 p  u5 ]4 k( b( t1 G
             end
    3 g4 L( a) `9 l     end
    ! @6 ]7 b" v" M. ]2 V. ?7 e end
    $ X9 E, z4 Z- j# H8 hend9 g' q/ ?# O  O$ u
    l;% i  F& j. }/ I/ o" v& K& @
    z;
    * x- C7 I# y( a1 f* ~ll=l;
    ! Z1 H3 A/ k5 d2 r4 r for i=1:n
    + ~8 [' b5 K+ M8 z for j=1:k! C+ g3 {  c2 E7 |9 h8 ^0 b
        if i~=s(j)$ b1 ~1 H1 f+ A
           ll(i)=ll(i);
    4 a( `3 ~- \- ^6 k& \4 j& g0 r7 e   else" d- p" f* b7 {1 n' Y5 v# d
           ll(i)=inf;
      [. r: r' @9 e% r( e% f" V2 A6 V   end
    4 ~, W1 E/ ?; l8 j; g5 [- e1 n) p3 ?end
    2 O% {; J" B9 n: ~$ eend7 Q* S! E/ p3 C5 i& i# C. u
    lv=inf;
    % a! E, z* Q* A$ B5 Y4 D, f) afor i=1:n
    8 R9 V/ }; ?; Z; I) ^    if ll(i)<lv
    0 }5 E! z8 U4 z! P! a       lv=ll(i);9 [2 U! }, Y8 I) }' l
           v=i;
    0 m0 Z0 n5 `1 N2 ^8 K: O! E   end& Y% v! P% r' Y# T& Y
    end
    0 u/ ^% h' p& elv;& w9 w& j' p, s5 A4 o
    v;7 M- }! T1 O. b' A, x7 X9 e" F
    s(k+1)=v;9 p' C) L  j4 a% H. C" \
    k=k+1;
    ( A! G2 h' z  c$ G, m+ Pu=s(k);3 F; q3 a$ t4 V8 F( r
    end4 @7 |3 v) ?5 m+ M) i& q, W, D
    l
    ' J1 ~; l0 @- P+ Ez
    " y" B6 H/ \  \) B- e1 p- t3 {, A" T5 Y: @1 ]
    (2) Floyd算法' c6 j# i4 R/ v+ ^
    road2.m文件源程序:
    6 C) g& P2 h4 J3 r# da=[0 1200 inf inf inf inf inf inf inf inf;8 s6 R$ Q" n1 [# ]# ^
    1200 0 12 202 inf inf inf inf inf inf;1 y4 r5 t, H& p& q( v5 {
    inf 12 0 inf 201 inf inf inf inf inf;% z9 R: t. E- H7 k9 ~1 W9 s! S, O
    inf 202 inf 0 31 20 inf inf inf inf;. @- F5 k  B$ U  i6 `1 h
    inf inf 201 31 0 10 inf 205 inf inf;$ u, S4 X, ], Q1 U0 o
    inf inf inf 20 10 0 195 inf inf inf;
    : O) W/ j9 r  }6 a, ?5 G! ~" tinf inf inf inf inf 195 0 5 306 inf;9 J0 f# _  u3 }1 P+ F  Z8 l
    inf inf inf inf 205 inf 5 0 inf 194;9 I7 U, {7 o. I% z' s
    inf inf inf inf inf inf 306 inf 0 10;) W  U! G" `$ H
    inf inf inf inf inf inf inf 194 10 0];
      S* p7 L" C: d# [3 }, x[D,R]=floyd(a)) `  J& Q$ c3 {8 g
    floyd.m文件源程序:
    8 f- Y/ s5 ^) J( u" s. A, r+ U& Z, qfunction[D,R]=floyd(a)
    + r8 Z" y+ Y- K: |" j9 X  F, _n=size(a,1);
    ' j' v) K" \4 l' RD=a+ M' l) K5 m6 P
    for i=1:n. r( P( U, W( k' a5 r; k
        for j=1:n7 L0 c' A! g' ?) G3 J
            R(i,j)=j;
    ( q" C9 H  J1 d: v# v; u    end
    + |  m& Y- E% o# {& \5 H: Xend9 Q+ |0 T( Z2 L+ P- ?- R
    R8 h: p6 d6 |7 l3 \
    for k=1:n- A' v2 q4 R7 r% {
        for i=1:n  Q- Q1 ~9 B5 k! s2 y4 s
            for j=1:n
    ; i" [1 O) ?% J            if D(i,k)+D(k,j)<D(i,j)
    1 p2 ^/ e/ T0 p               D(i,j)=D(i,k)+D(k,j);
    1 |- f- m7 s8 J# `               R(i,j)=R(i,k);
    $ A6 [0 _  D  G8 K6 G5 S           end, ]0 u! J$ p  X9 Y" n
           end
    - x( w! c) z0 n   end+ O1 q2 A% ?/ ^7 \" F0 D/ x  O
       k& ~7 e# s( L# T% N6 l
       D
    , X8 i2 t. E+ i, W# [   R& O1 e4 Z. N  v% t' _" z4 V
    end
    7 d1 W; G( L* I, W7 C, F( }五.结果分析9 T$ e: |9 i9 s# b' T
    (1)Dijkstra算法
    9 I0 _* }# a& \4 E运行结果:7 B1 g5 `6 p1 A1 L, f
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812# {& G0 @: \' r: T5 {: z
    z =1     1     2       2     3       4     6      5      10      8
    / V; t6 m% g& ~5 p$ l
    % K; N7 o: m% B3 t) r结果分析:
    1 y- z& _% s: s' {通过运行结果: 到其他顶点的最短路的权 ,可看出,
    ; Z7 s) U: e! R% P4 t  k 到 (即 到 )的最短距离为1812(km);
    5 d1 ]8 s( B' q5 c- F; o* W9 |, ?" i 到 (即 到 )的最短距离为1618(km);- h5 l5 q7 [+ \4 C6 J+ c% u
    . s7 {# Y# T$ h& ^; f' o
    到 的最短路径为:V1→V2→V3→V5→V8→V10;4 T1 C& u7 [8 f9 C- C; X
    到 的最短路径为:V1→V2→V3→V5→V8。! U; R! V5 Y1 }% S3 A

    * Y5 ~0 ^) `; P(2) Floyd算法" k3 G0 s# K) c
    运行结果:
    ! e, e4 u1 M5 p) Y, {D =
    & l, F1 v4 L7 @+ o2 a2 m     0  1200  1212  1402  1413  1422  1617  1618  1822  1812
      b! C  f/ r- @# }  q  1200     0    12   202   213   222   417   418   622   612
    2 Q' D( B& w/ r6 a" t# c  1212    12     0   214   201   211   406   406   610   600
    ( v6 d1 n. u8 x0 I  1402   202   214     0    30    20   215   220   424   414
    4 k  E8 r+ C  c$ @  1413   213   201    30     0    10   205   205   409   399
    9 H/ s8 n, ?) M. Q  1422   222   211    20    10     0   195   200   404   394( H" _; L7 L8 A9 C  X7 Q/ d0 T' j1 _
      1617   417   406   215   205   195     0     5   209   199
    : R- V+ x# P8 @1 `  1618   418   406   220   205   200     5     0   204   194
    8 e4 S/ N, ^' r3 {3 a5 i" b  1822   622   610   424   409   404   209   204     0    10! m3 I0 e: v: ?+ N/ [1 H. b; ^
      1812   612   600   414   399   394   199   194    10     0
    * o( f+ c6 B  t
    ; l& y2 u3 A0 S1 \# X6 H- @* N2 ]R =
    : i$ W; U3 x/ j* C0 ]3 r/ R7 t4 q- w   1   2   2   2   2   2   2   2   2   2: P" L; o; _! u4 p& Y8 O  K3 T6 O
       1   2   3   4   3   4   4   3   3   3, u' U1 `1 _- Z
       2   2   3   2   5   5   5   5   5   5
    6 \& N% j( h  @  o/ E; `   2   2   2   4   6   6   6   6   6   6
    2 t# g" C7 H9 D2 q: Y- l- y" E! k   3   3   3   6   5   6   6   8   8   8
    & |# G, K7 o7 `# F* g   4   4   5   4   5   6   7   7   7   70 l6 ]3 y) ^& j* k1 j. T$ w1 M+ x
       6   6   6   6   6   6   7   8   8   87 L# \5 ^& }- R. J3 p
       5   5   5   7   5   7   7   8  10  102 |2 s& }, s( w$ d; h# s% q8 J3 L
      10  10  10  10  10  10  10  10   9  10
    3 @( ]8 z  Y3 h* U1 d# d; |   8   8   8   8   8   8   8   8   9  100 [7 |  \4 W8 Y4 B. |( m
    结果分析:
    4 `2 m$ E9 D) }+ ^+ ?/ ]通过运行结果:可看出,
    + b% N+ q8 T. ` 到 (即 到 )的最短距离为1812(km);' P# Q: G9 m, @+ H' ^" L8 K
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    ' z) ^4 y. e1 t; a 到 (即 到 )的最短距离为1618(km);% F- u6 i' u/ D; U4 @
    到 的最短路径为:V1→V2→V3→V5→V8。' r* w2 i5 H, {# i
    8 v, C7 j: Z# u- L. x- `5 q
    9 z$ b9 ^8 y2 Z! ]" B' Q" u! T
    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 04:37 , Processed in 0.456719 second(s), 55 queries .

    回顶部