QQ登录

只需要一步,快速开始

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

[课件资源] 最短路问题

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

2

主题

1

听众

14

积分

升级  9.47%

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

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-6-6 10:52 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最短路问题及其算法
    , Z* U1 V& [, _& g, k( w. U& b! f' `一.实验目的:
    + b9 m8 f; \" B% R( N9 H1、了解与掌握图论的基本概念、相关MATLAB知识和最短路径算法;
    1 a1 O# g/ \2 T: s! H2、学会使用MATLAB编写Dijkstra算法和Floyd算法程序求最短路径.  @$ n* ~, |! A6 N( l+ j! P
    二.实验内容:3 i1 |' [+ a% ~; ?! o; f4 u
    要铺设一条A1→A2→…→A15的输送天然气的主管道,如图所示.经筛选后可以生产这种主管道的钢厂有S1,S2,…,S7.图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km).
    ! A1 _6 ]1 X7 f! e. P1 d为方便计,1km主管道钢管称为1单位钢管.  [( `! f% T7 e
    一个钢厂如果承担制造这种钢管,至少需要生产500单位钢厂 在指定期限内能生产刚钢管的最大数量为 个单位.钢管出厂销价1单位钢管为 万元,如下表:3 m7 C, n' V4 Q3 @3 |

    - V1 {: G6 f/ ?8 ?2 H# ]1        2        3        4        5        6        7
    % j' W" C* N: D7 ^  K) ?7 o * @& y1 D  F3 H( H- z# r2 O
    800        800        1000        2000        2000        2000        3000
    0 q4 r6 l2 g" o- E* q3 a. ]' o2 M/ \' T
    * N- I' C3 B- M& k* t160        155        155        160        155        150        160
    7 }$ `6 G, r: e! W- E) R6 r2 I, [( W0 f: Q# {
    1单位钢管的铁路运价如下表:
    + ~/ {! o0 Y; D4 E7 s里程(km)          300- `; M8 D0 X2 U* e- L
    301-350        351-400        401-450        451-500
    . l' l/ U  P4 ^9 |: n) U( R; B/ F运价(万元)        20          23          26          29          32
    4 s- R0 p- h- T里程(km)        501-600        601-700        701-800        801-900        901-1000
    ) V+ v7 |' t% {& |, p+ b运价(万元)          37          44          50          55          60
    ' Z" N; l/ r3 G6 _1000km以上每增加1至100km运价增加5万元.# G  i+ `8 g- V8 l' P6 K! V
    公路运输费用为1单位钢管0.1万元每千米(不足整千米部分按整千米计算).; z, m. m. e- j% f9 ]# o( N
    假设从钢厂 订购钢管运输到铺设地点 和 .钢厂 在指定期间内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为155万元.
    * u5 i% U# f) C6 i, F0 `" Z; B " u6 E* E# Y+ A+ B. e
    试制定一个从钢厂 到铺设地点 和 的钢管的订购与运输计划,使总费用最小.8 |! w' w/ J0 J" l) O
    三. 模型建立
    5 s' h- V4 b- G( ], R设 为 ,将上图按从上到下,从右到左的顺序依次命名如下.将上图改为如下赋权图形 :) Y9 J# N) I  `- ^7 C
    " q4 c4 A2 X) r0 J- [+ w$ V
    利用Dijkstra算法和Floyd算法:求 中从顶点 到其余顶点的最短路.而求钢厂 到铺设地点 和 的最短距离,即为 到 和 的最短距离
    3 N- r; P8 g. l
    ! u% ?! m5 ?( s. j" X+ q; N解:先写出带权邻接矩阵:
    # S% @# D0 j( G2 G: c+ g! n# D) r
    * L# n9 j' e0 v" H2 [3 D后分别用Dijkstra算法和Floyd算法步骤,求出 到 和 的最短路的权 以及 的父亲点标记 .- A  e# x+ @0 d
    四. 模型求解(含经调试后正确的源程序)
    4 \" z2 Z/ W* u' ^(1) Dijkstra算法
    ; F9 c: h1 U2 k- ^! Y% A3 oroad1.m文件源程序:
    # K, S9 g! ]& _2 |6 ?$ Aw=[0 1200 inf inf inf inf inf inf inf inf;
    + S( e$ h( o. }; z1200 0 12 202 inf inf inf inf inf inf;
    , x' [* F1 e8 W8 g6 Einf 12 0 inf 201 inf inf inf inf inf;/ U( Q& f+ Q$ h- K/ ?# W
    inf 202 inf 0 31 20 inf inf inf inf;, X9 f& r% ?7 B! J5 t' S
    inf inf 201 31 0 10 inf 205 inf inf;
    % U: c. G+ \8 hinf inf inf 20 10 0 195 inf inf inf;! K" C' X0 n" S
    inf inf inf inf inf 195 0 5 306 inf;/ n- E' E7 Q1 C0 H
    inf inf inf inf 205 inf 5 0 inf 194;
    7 T: D4 `4 K3 s; g1 finf inf inf inf inf inf 306 inf 0 10;
    4 a( F$ R4 i3 ^0 @0 \4 n: G1 d9 ainf inf inf inf inf inf inf 194 10 0]; : r. A( k7 M: G0 f
    n=size(w,1);
    / U  I# q  N% v! _0 q# Bw1=w(1,;
    & ~: e: w8 t3 i3 Qfor i=1:n
    $ F- i0 q' r+ t    l(i)=w1(i);8 {- R( W  P; O8 j$ I
        z(i)=1;
    : i2 V) _+ `6 S( U' w$ @end
    0 \4 u% {" C7 a6 @  J* ds=[];7 Y* l* i; B* V8 g( k3 S( g
    s(1)=1;
    , p* @; B* }8 A, ^$ wu=s(1);
    . U+ F: W  p% V# V' |k=1;; e- L8 u& g5 q% W3 i! o! ]
    l;+ @) r2 f8 L% O5 V
    z;6 H& g( T* c! Y, m$ l
    while k<n1 E5 o! ~) ~9 g6 P
        for i=1:n
    " w$ Y5 R& l; e1 R/ e; }5 B    for j=1:k( F2 F5 V4 @/ P; _5 @3 a
           if i~=s(j)  ]( b% V2 U3 s/ n/ J( {
              if l(i)>l(u)+w(u,i);* {. F9 Z0 H1 V- S; u2 M  r' `
                 l(i)=l(u)+w(u,i);
    ' K6 K; Q3 p& O             z(i)=u;
    - R# `; N5 X# z' O' N/ u         end( g$ b* m) O( j/ v8 r) n, O
         end
    7 |. V* b' E, V end$ f4 I- r1 R- O
    end8 Q! r) z; @8 N# }  W
    l;7 @% t8 u" {: c# g* ?0 b& C
    z;! _! K: A- t% G* q( s
    ll=l;4 c2 L6 \! D  l6 p
    for i=1:n9 I( q# {; G$ S0 O8 B6 R
    for j=1:k) {' o7 d/ u; A$ f
        if i~=s(j); }3 q3 s9 h) c" w; j% q
           ll(i)=ll(i);7 S+ i+ ]8 ^# `/ ?" `
       else
    " _6 R& h. G# V& W" ?       ll(i)=inf;
    4 V: `) u" Y+ |4 f! M; G   end: J, q/ r; Y- E+ ^
    end. i2 \* g: r% R
    end
    3 g" C/ b) {: ]6 q; A  d# G; vlv=inf;
    4 q; S/ E+ A$ f5 kfor i=1:n4 ^: z7 f  t  q" e- F
        if ll(i)<lv/ j2 ^$ x" K( p: A& c/ N
           lv=ll(i);" q: v7 Y$ x0 r* p: O1 @
           v=i;2 u- r" H3 ~2 _# P4 W; \- L
       end* f; }8 x; ]* r
    end
    % _$ C7 {' ^: flv;
    1 X) v7 {' J. g" ov;
    ) E: S5 c5 d8 h+ \. _/ ~s(k+1)=v;, r' O! F; l& a3 q- b& F$ U: R1 Q
    k=k+1;5 n* y) m( s8 i: x: \5 ]5 {9 `7 g  J
    u=s(k);9 U! w+ }$ I; P! d6 L
    end
    4 _& s6 Q' s7 d$ d8 Gl
    2 [. I; J! k) c$ w, Z! A0 q8 }; wz: t* Q5 b. l4 e8 x6 E2 G7 h0 L3 s+ m
    ) K$ j3 c# ?: u7 j: C% b
    (2) Floyd算法
    7 W0 q! [9 _; Z+ |road2.m文件源程序:
    ! L, W  l5 W/ @, B; V( O6 Ca=[0 1200 inf inf inf inf inf inf inf inf;
    - T8 y4 \1 G$ |8 g3 }1200 0 12 202 inf inf inf inf inf inf;
    % {- x3 h9 I" E3 i: c2 L7 f, Pinf 12 0 inf 201 inf inf inf inf inf;
    $ ^) U* F/ y9 ^$ R) Tinf 202 inf 0 31 20 inf inf inf inf;
    9 L0 x3 q. G& e0 Binf inf 201 31 0 10 inf 205 inf inf;, a. K1 v- [; {! g
    inf inf inf 20 10 0 195 inf inf inf;
    & d  Q( a% F$ c  qinf inf inf inf inf 195 0 5 306 inf;
    # m8 Y) X7 B! d1 I' s$ _inf inf inf inf 205 inf 5 0 inf 194;, Z! `- S2 J7 U, D3 z' C+ u
    inf inf inf inf inf inf 306 inf 0 10;
    + i+ T, I' |3 d( q1 Q# Jinf inf inf inf inf inf inf 194 10 0];
    8 ~+ W7 y! y- s0 i8 X; X* Y[D,R]=floyd(a)) s/ k0 q" D& c7 F2 P$ K
    floyd.m文件源程序:
    ( [& D' G7 a9 ?# {$ efunction[D,R]=floyd(a)
    6 P) K" V7 W. `" `, {0 rn=size(a,1);
    # |: H" r* D: e) T, U6 AD=a3 i* b. @; q9 m. ^
    for i=1:n) u0 k3 _. D" P: C
        for j=1:n
    , {6 g( _8 N# }8 P- b/ j        R(i,j)=j;
    0 f, T2 Z& E# T' }# x) q* ]    end
    " `' D; k6 V  l) W! q+ r9 Cend
    0 X( j# k$ x5 B1 H9 D3 MR
    - }. [5 r5 v6 {4 K' w. V( Gfor k=1:n( @- @6 p  w) z$ p
        for i=1:n
    * e" B! B+ l$ h        for j=1:n
    0 O0 ?9 N4 o0 j. }            if D(i,k)+D(k,j)<D(i,j)
    ; J+ V" K- E, a% n% @- M) T5 ^) l               D(i,j)=D(i,k)+D(k,j);( _7 n1 B* w2 k2 R1 c( o  ?) j) c
                   R(i,j)=R(i,k);
    . T, `! m0 _0 ?           end1 e* [; O$ |  E& P5 a
           end
    & a) ^8 l- m( K% h9 |& a5 @1 ~   end9 d3 Q& M" r; J+ f8 O0 _+ b
       k
    / X4 T$ L$ U. d  |   D6 |7 y% r1 F- O" C( }
       R3 X) a6 c7 w. e/ R1 K. ]
    end* ?* I7 {( q9 s$ g+ @$ B" o2 j
    五.结果分析
    / }5 c- x; N# s( W  B1 ~: v. A( g8 V' w(1)Dijkstra算法
    6 y, `/ a$ _  \, @: V运行结果:7 h5 |0 j1 k/ S# l
    l = 0   1200   1212   1402   1413   1422   1617   1618   1822   1812
      z  o, E. T8 ?" yz =1     1     2       2     3       4     6      5      10      8! Z' C. i3 r' ~
    5 f$ d, m1 r* v' T6 M9 u  Q
    结果分析:. V/ y/ @# a$ k- n5 f( E( {
    通过运行结果: 到其他顶点的最短路的权 ,可看出,7 I) }& N7 U7 e( A6 [
    到 (即 到 )的最短距离为1812(km);$ }8 u6 z; P( R
    到 (即 到 )的最短距离为1618(km);
    0 V) e, D6 B; S- t/ f, V- }
    0 L" U8 _, y4 W" j4 Z( h 到 的最短路径为:V1→V2→V3→V5→V8→V10;
    4 g6 m/ L; |$ I* I7 m) ~ 到 的最短路径为:V1→V2→V3→V5→V8。
    / m# {- p; R# y% ^% S: w* Z! P  j& d+ x  ~' ^( {, J
    (2) Floyd算法% b% t( m  Z  L+ O
    运行结果:- ~2 R/ I4 C1 @% _- y
    D =
    6 m( j- S" u  i8 N. u5 g1 S     0  1200  1212  1402  1413  1422  1617  1618  1822  1812
    " {" R3 u1 w, ~$ W# [; c  1200     0    12   202   213   222   417   418   622   612. D2 }! T' N- l# L0 l1 K
      1212    12     0   214   201   211   406   406   610   600
    " m! x% c, Z+ ]( Q( D5 u  1402   202   214     0    30    20   215   220   424   414; V* z3 I9 y: d4 y2 i2 N
      1413   213   201    30     0    10   205   205   409   399
    + X) j# j/ r2 {. C: k  1422   222   211    20    10     0   195   200   404   394) p  i0 K9 h% p. ?1 k6 K
      1617   417   406   215   205   195     0     5   209   199& t2 {- a8 i9 u
      1618   418   406   220   205   200     5     0   204   194
    2 R1 c9 i- ~& o  1822   622   610   424   409   404   209   204     0    10
    " U: _; q2 _8 z$ m0 r  }0 X  1812   612   600   414   399   394   199   194    10     0: y# T0 b6 u$ u( ]& I
    . E$ q/ O" i' L" C8 f% E$ r3 `3 f
    R =6 Z6 h+ P2 I4 E  a9 D
       1   2   2   2   2   2   2   2   2   2+ G9 C7 X& r  @6 |' @
       1   2   3   4   3   4   4   3   3   3; i, o4 y4 {' z# T& l
       2   2   3   2   5   5   5   5   5   58 }6 ]/ s$ e# x! c: U$ m; n
       2   2   2   4   6   6   6   6   6   62 L9 p' t4 }% G  J4 Q  N
       3   3   3   6   5   6   6   8   8   89 C# W# j, w3 ?+ Y4 W
       4   4   5   4   5   6   7   7   7   7
    * C2 v1 A& M+ T- o  x8 T   6   6   6   6   6   6   7   8   8   8
      s+ v9 z# V6 j( H5 l; E- L2 j   5   5   5   7   5   7   7   8  10  108 I' t" e% a0 H& ~
      10  10  10  10  10  10  10  10   9  10* S' y4 l2 G6 B
       8   8   8   8   8   8   8   8   9  10
    " P/ r# _- L7 T1 v结果分析:
    3 p8 z. o4 w1 G: ~6 ^3 B" y通过运行结果:可看出,& K" a( r# o: `: T
    到 (即 到 )的最短距离为1812(km);4 I* X- e* s, V( F* C: f4 F5 b
    到 的最短路径为:V1→V2→V3→V5→V8→V10;9 U; o3 q0 \7 Z" g+ _
    到 (即 到 )的最短距离为1618(km);: t, b. R% A2 Y/ E+ N
    到 的最短路径为:V1→V2→V3→V5→V8。
    2 V( \1 `! a  ?  E& ~  K' C' n3 X# b4 F  d0 h5 B

    - |# H. ?8 M9 ]
    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, 2025-6-20 04:34 , Processed in 0.482868 second(s), 54 queries .

    回顶部