QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    " Z+ \) K% I0 C8 l/ c# i, y一.实验目的:
    $ M/ Q" p7 i; A, [* C- t1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    ; H- R- |( X* z. e# ]2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.' T! H6 Y4 Y  ]8 W+ `1 Z
    二.实验内容:
    / E6 m, [3 `- _2 E9 P( g( q# c要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).- q3 U# b) H* x9 n9 ?: \
    为方便计,1km主管道钢管称为1单位钢管.
    + }8 H# `& c; o' z7 C一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:+ o; a# f' b! w1 |0 C

    7 N4 B9 L/ M! E1        2        3        4        5        6        71 O' U; D% n8 ?

    ( r9 k8 Z! s$ ^* B5 a+ O/ S8 S, h# @800        800        1000        2000        2000        2000        3000% F  k* g5 ~, L/ l1 I) C. v

      K9 |& ~( w& @160        155        155        160        155        150        160
    6 c! D- O8 r, M# E
    8 G& y& x& m' k1 |/ ?  q& s1单位钢管的铁路运价如下表:
    ' `, y0 r+ R# W6 `! r, v/ I- Y3 X里程(km)          300# y# M! U2 y3 o' ]5 g
    301-350        351-400        401-450        451-500
    9 d! P+ `2 E2 [8 x运价(万元)        20          23          26          29          328 w( A) |6 O) q
    里程(km)        501-600        601-700        701-800        801-900        901-1000
    , J3 U. ]6 Y9 }运价(万元)          37          44          50          55          60
    " E. Z+ \% `7 ^( ^/ X7 x- z1000km以上每增加1至100km运价增加5万元.* a" F; S, P" Y$ y2 i
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).$ F4 j, u3 T4 A% I" C
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.$ i3 K) X% p, I) n/ k  t" h

    % T0 O- f0 L1 y试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.
    ( I' o) N3 n- H0 V8 X9 f- L三. 模型建立/ Z1 X; E9 j. n- W
    设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :# ~1 \7 o3 I, [2 T! K) a

    : X4 l* F7 v) V; E) k利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离# w/ f; s: U* [4 _

    * s. u2 W0 `3 c解:先写出带权邻接矩阵:
    : s9 _- [8 t2 q$ r% C
    7 Z# C0 }: P7 h) X3 d: ?: d8 q后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .+ \4 `& F  Y0 Z2 Q
    四. 模型求解(含经调试后正确的源程序)0 \& d% o+ l, a" |% @5 H/ l( F
    (1) Dijkstra算法& N& E9 }' T" d& Z& h
    road1.m文件源程序:& [/ b1 _5 |. [$ i6 {- b
    w=[0 1200 inf inf inf inf inf inf inf inf;
    ' o1 ~; J* f3 A, d) M$ x8 c5 C# }# ~1200 0 12 202 inf inf inf inf inf inf;+ c2 T" P3 X6 Q! h" p( L
    inf 12 0 inf 201 inf inf inf inf inf;
    , M4 m5 Z; S+ y( binf 202 inf 0 31 20 inf inf inf inf;
    4 E0 N; x- |6 o2 o$ j6 H: n2 dinf inf 201 31 0 10 inf 205 inf inf;
      |, J4 {: f1 Y- \1 e; C# T/ y9 ~inf inf inf 20 10 0 195 inf inf inf;
    4 ?5 @5 H$ x. f" linf inf inf inf inf 195 0 5 306 inf;* ^4 y. J/ o! q* r( D
    inf inf inf inf 205 inf 5 0 inf 194;+ Y: [6 r# \( `8 I$ G8 U
    inf inf inf inf inf inf 306 inf 0 10;7 ^0 t9 z" P1 [0 l. F" c
    inf inf inf inf inf inf inf 194 10 0]; 3 {% B6 Y7 k* T6 c6 I! _
    n=size(w,1);
    0 C! a0 [5 D2 M; x3 nw1=w(1,;6 e" ~  y9 U# S0 x4 f
    for i=1:n
    6 U' L/ W1 S0 Z  W9 `7 w' |# G5 K    l(i)=w1(i);) S, H0 E4 {* K3 M3 R+ d' k' p
        z(i)=1;8 a! ]- z% m0 ^% v4 j+ X  ^6 e+ y
    end4 @7 C$ A" K5 i/ K4 X: I6 J
    s=[];2 w: C. i  \- ^2 u' k0 W: J
    s(1)=1;
    " E/ d4 J8 `0 X1 k. ou=s(1);) }6 h4 u) E% o# A# t; ?
    k=1;
    0 N1 ~$ j% `, K; \6 R: _l;
    ! t: i7 E3 i, ]- O0 T1 _& S" a% _! jz;( b) E4 F' A- X: q
    while k<n
    + l" a/ l  B. p8 d: V5 U    for i=1:n
    ' k0 O& _3 _/ W# I* s0 c# ]3 K    for j=1:k- h* V7 a1 G: n$ b2 c! s' T2 W
           if i~=s(j)
    5 W+ P* ~$ q( }% n1 g% q3 I          if l(i)>l(u)+w(u,i);
    1 X  b' P: h8 S0 I0 s5 ~- Q             l(i)=l(u)+w(u,i);
    / C! A. n0 r& w7 I             z(i)=u;- R( L6 p1 K0 t( P7 J+ P3 R4 y2 w
             end3 r3 ?) y2 ]7 {7 r1 K
         end
    6 f$ t- w/ S: X) v4 }8 [ end. e3 g, q" |" y  F2 V$ D" k7 W
    end# K' j$ [* b4 g2 U/ x& ?
    l;
    ! L! b0 I2 H( U' ^ z;
    ) s. S2 z, h, `  t+ P& b0 B/ Mll=l;5 z6 J# m' L0 q4 S, X" l) ]0 X1 T
    for i=1:n0 V( Z! V, T' c' I/ M4 m
    for j=1:k
    , X( p' U: h7 c1 D8 A2 ~3 ~+ M    if i~=s(j)
    $ P* E( J4 y* a; X: j4 g- O4 R       ll(i)=ll(i);
    6 D- ?! G/ d# r* F* {   else: z' n8 F) K% l7 r
           ll(i)=inf;
    5 v3 ?8 k, I# \0 C( o- g   end- b9 b, r; J$ @0 m4 P. G
    end: Z9 O% C- \1 J* h- U
    end
    ' q+ P5 s( K+ E+ Ulv=inf;2 ~- o% u9 c# c6 n! z8 i" X$ _
    for i=1:n
    5 Z: ?5 e) R5 ?$ s6 Q6 u    if ll(i)<lv
    # a; P2 S0 O, q- w' R       lv=ll(i);
    3 g0 m3 \* ]. ]       v=i;( ?" t+ ?' o9 `3 G, U
       end
    % r7 V! J0 C6 F: R& z/ Z9 G8 J: Bend
    2 V1 A  N( u" }  t/ V6 {/ p3 elv;, b% r% q% I. d' R
    v;& U8 a7 j, t+ [
    s(k+1)=v;6 l! |1 C" {* ]$ k, \* S
    k=k+1;
    + T4 Z* O: M* h' Q6 lu=s(k);
    $ a' b, i* P# wend
      V: n" ]  X- U- E+ k5 V+ ]2 _" el6 \3 Z% p2 f1 e9 G
    z7 x9 F- {; @+ ]" @
    % A3 T: o9 o8 K
    (2) Floyd算法- ]/ G4 C# }+ F  z0 m" [7 H
    road2.m文件源程序:
    ! U& T, \3 h  l) ?3 Aa=[0 1200 inf inf inf inf inf inf inf inf;
    . m; ~; G, c5 ?4 L1200 0 12 202 inf inf inf inf inf inf;" Z/ ]# T$ h1 ~" J- w$ M0 W
    inf 12 0 inf 201 inf inf inf inf inf;
    ; l3 ?) r9 Z- Y% T& D1 Rinf 202 inf 0 31 20 inf inf inf inf;
    ) a1 Q: ]' {  d4 D" H/ Kinf inf 201 31 0 10 inf 205 inf inf;7 T$ n6 q7 y7 J9 v7 Z7 Z4 j
    inf inf inf 20 10 0 195 inf inf inf;/ J! Q5 E/ g7 E# I
    inf inf inf inf inf 195 0 5 306 inf;
    ! [1 O5 v% R7 r. einf inf inf inf 205 inf 5 0 inf 194;3 o' t4 d; i, L
    inf inf inf inf inf inf 306 inf 0 10;' P) h* u( [; Q* I! A. a; j
    inf inf inf inf inf inf inf 194 10 0];# F7 q% F; j9 X0 X% C
    [D,R]=floyd(a)
    + y1 N% C% W: ]floyd.m文件源程序:$ k; V# W$ Z3 x4 X5 `
    function[D,R]=floyd(a)$ |% R; F2 f  j" Q& j0 R  y. R
    n=size(a,1);; \6 G1 W( _8 ^& F5 O% h8 Q
    D=a5 }( S3 D- J5 G& n/ h+ s7 ]
    for i=1:n: d' E- g9 |" h7 ~' Y
        for j=1:n
    8 L7 G3 \, l0 a  i( \  S. Z0 B        R(i,j)=j;4 j" z2 J/ k" Z8 m2 h3 o
        end2 o9 r6 d; X. T) }5 ?0 B% Z. s
    end$ R# {. Q. M4 C. U8 f$ S3 {
    R
    7 ?% U4 E; f+ c. E% z0 wfor k=1:n' o: I* X! c3 W2 z8 ~' _- i9 j
        for i=1:n8 L) J2 {; A$ N/ w; N8 U: J
            for j=1:n8 e* |' k% C& z
                if D(i,k)+D(k,j)<D(i,j)/ K' g* q8 Z. C2 t) r
                   D(i,j)=D(i,k)+D(k,j);! j+ p7 u# J/ C  T0 |2 B, {" q
                   R(i,j)=R(i,k);6 O. t+ D. f$ d
               end# e$ R1 K4 b3 q7 E
           end
    6 o- j5 r) ~( \/ |7 C7 e   end
    6 M! x6 |8 h# r" Y; A   k
    5 X9 `: N  ~: j0 D   D: M! r# J# w$ s& \, X$ P
       R' o, o+ i& [$ c! G: W
    end/ {2 v' @6 N  \( Q2 \2 A
    五.结果分析* c& V, q  q5 s$ ]
    (1)Dijkstra算法  I/ y- @2 h1 ~$ n. d% `
    运行结果:
    : S" v  @3 O( h, Z3 Z/ Wl = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
    : x  ]/ G) ]3 v. s; l" Qz =1     1     2       2     3       4     6      5      10      8: n  a, p$ n! Z- U
    0 j) f3 \$ e" n4 d& U% |
    结果分析:4 N7 l6 i3 E# X" l, ~+ w7 B0 W
    通过运行结果: 到其他顶点的最短路的权 ,可看出,
    1 @4 \& l; e% k0 E+ a: A2 A8 P 到 (即 到 )的最短距离为1812(km);
    : z" G* t- {; {4 t( X# ~ 到 (即 到 )的最短距离为1618(km);
    8 f* q# c8 C7 Q' z. m% v5 }! W/ J5 n4 t
    到 的最短路径为:V1→V2→V3→V5→V8→V10;! y& c4 g  {- V! |+ i) a
    到 的最短路径为:V1→V2→V3→V5→V8。
    1 R( @5 o% c5 D$ [; _  T' {
    * C# q2 ]; w: N7 B9 s( A% Q/ q8 H(2) Floyd算法1 \! ?; P& U3 I* E, M
    运行结果:5 z, A4 u) q$ @6 L
    D =$ ?! f6 [# k; a4 ^, W2 j6 `
         0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    * R, V: Q2 @5 z7 G" t) L% Y  1200     0    12   202   213   222   417   418   622   6126 d) E2 k) h/ k* ~
      1212    12     0   214   201   211   406   406   610   600
    : s4 D2 l4 f. ~  1402   202   214     0    30    20   215   220   424   414
    / y( A0 f& M/ w  1413   213   201    30     0    10   205   205   409   3995 k+ s" K" K7 h: W; I
      1422   222   211    20    10     0   195   200   404   394
    8 Y* D. D0 S4 I- [4 f+ b  1617   417   406   215   205   195     0     5   209   199: ~: e& k8 P; F, D1 k: i0 ?& n
      1618   418   406   220   205   200     5     0   204   1943 ^- B+ q9 l+ o/ N2 o
      1822   622   610   424   409   404   209   204     0    10* s! q& c  e( g# j, Y2 a
      1812   612   600   414   399   394   199   194    10     0
    1 D) ^: N/ L4 R: w
    : k! H( J$ B, f( X' @R =& U& u. W. m6 `7 e: }8 l) C
       1   2   2   2   2   2   2   2   2   2' ~$ D6 v$ [! X, l9 g7 n. b
       1   2   3   4   3   4   4   3   3   33 I& @) r" y6 d4 h2 e, @
       2   2   3   2   5   5   5   5   5   5
    ! T) R7 _: r' t! y   2   2   2   4   6   6   6   6   6   66 C. ^: q" r* T' l
       3   3   3   6   5   6   6   8   8   8
    " T0 S/ w& x5 W6 |  C   4   4   5   4   5   6   7   7   7   7
    3 M8 i9 T. L2 u- G( d* K   6   6   6   6   6   6   7   8   8   8: R. w& g- d6 X; b3 U- U4 T
       5   5   5   7   5   7   7   8  10  10) k0 w( C5 @% |9 v
      10  10  10  10  10  10  10  10   9  105 W8 R; \$ K, e$ E- m+ N
       8   8   8   8   8   8   8   8   9  10
    3 {& Q4 P+ ]) m/ c. d结果分析:
    " u1 _# p. n8 x; J4 @' i通过运行结果:可看出,. V+ I5 _8 ^" W+ S! i* D4 Z6 Z
    到 (即 到 )的最短距离为1812(km);1 Q4 |! F4 m; i. b& G( c% F6 f; S) P! `
    到 的最短路径为:V1→V2→V3→V5→V8→V10;
    # J" x1 S0 P  b8 _" p 到 (即 到 )的最短距离为1618(km);$ Z  F6 A& m0 n3 o) e4 f
    到 的最短路径为:V1→V2→V3→V5→V8。
    7 z1 @' c4 G+ W. L3 p6 w2 j% h2 i' x7 u( {& I5 c! x

    * G5 H! K& k$ r7 [( Y
    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-7-29 09:09 , Processed in 0.333562 second(s), 55 queries .

    回顶部