QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1188

主题

4

听众

2931

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】3 S) s, X: q7 o- F" S- C" z
+ }" p( O0 T: Y* _6 s% M2 }  g
        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。
3 a9 y, h: c, y- ^7 P( _7 S! n1 J; E- |" S8 S
【输入格式】
# q' }2 V- h$ ]4 J- x/ K; |$ T$ _  N# w* b9 c$ L
        第一行包含两个整数 n 和 m。8 i  r) k. q  i2 w! l, J8 }6 P8 B) S
/ `" P. C' k! j0 z# H9 t' h
        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。- o$ \# f, A7 I+ }

7 \3 T4 P' H( p. t【输出格式】
# Q0 [- W5 V/ N9 L
' m9 G* C2 X' B! t" ?: K6 `7 a/ H; M" M        输出一个整数,表示从左上角移动至右下角的最少移动次数。
- G3 L/ y! W7 d
6 g4 U6 H" Z( }【数据范围】* \* j! c! f& l4 a# P& B, A

; O+ d: F" c! Y/ ?9 Y        1≤n,m≤1000 f6 `* K; h# d" g5 ?
* M8 F" P+ N' c7 ]$ ~' ^- @; K
【输入样例】0 Q0 ~" y+ K1 a2 H% u/ b

! g+ y& o9 ], I1 e0 q6 p% J& Q5 5
4 {- F: b& Y1 J, b* r3 o( \6 [0 1 0 0 0
7 E  }3 Z7 [$ T0 1 0 1 0" Y. B; l0 j2 w1 r3 {
0 0 0 0 0
" [* ~( w- l9 H( i8 _! z  m0 1 1 1 0* X& m8 o: b& C, {- M. \7 x
0 0 0 1 0# e  |& V  i! e* |& h' B" h
【输出样例】
3 q6 G$ ^( a" w& u2 _; b2 P+ B0 j. w3 z2 S
8
1 {9 S- j; T7 g8 | 【解题思路】
/ P# z+ U( V; J: u8 W5 ^" j
' n' ^' I8 ]  X/ l& A( a8 h1 I! x$ \        BFS的典中典。
  1. from collections import *) m2 M% J, ?/ B0 @) M/ Y
  2. n,m = map(int,input().split())
    : i- V+ Z6 ]2 W! U! O2 Q9 p
  3. mp = [[0]*(m+5)]
    0 O/ T* f) w3 p7 M  S  p
  4. for i in range(n):( r; G  r; o, P4 g( R+ T; v
  5.     mp.append([0]+list(map(int,input().split())))
    0 h3 a4 O3 W4 ~$ q! l$ S
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]
    ' F$ s/ a5 f6 L  a* b3 P
  7. st = [[0]*(m+5) for _ in range(n+5)]
    8 L% ~/ p\" l- z
  8. def bfs():8 r3 a7 [/ V9 L2 x9 b- b6 q$ b
  9.     q = deque()
    * L. X$ D( ]$ o) T
  10.     q.append([1,1,0])! H- w$ D2 ]! s7 P) E\" F
  11.     st[1][1]=1) [0 X: }7 a- S
  12.     while q:
    1 m$ G5 H2 |  A, w3 M
  13.         tx,ty,step = q.popleft()$ |  _5 J& n6 w7 N
  14.         if tx==n and ty==m:
    / U3 m$ P  m1 u1 O+ p9 v$ [
  15.             print(step)/ z! R$ N3 q6 J8 w) Z0 f9 S
  16.             return
    1 D# k! f- Y8 Q) a. i
  17.         for x_,y_ in dir:
    ( R# ]  P! ^+ J
  18.             nx,ny = tx+x_,ty+y_; @5 I9 X+ G7 k6 E
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue1 N& V8 t/ o, T, O
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue
    \" Y2 \\" Q3 t4 N& x( l+ D* \
  21.             q.append( [nx,ny,step+1] )+ E/ ?# G: Q# Q( S9 N7 ]  e
  22.             st[nx][ny]=10 f6 g6 ?& h. s' o# ~9 C3 \
  23. bfs()
复制代码
7 q. _; o3 a# T% Y8 i. `0 n* }/ I
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-5-26 00:09 , Processed in 0.639516 second(s), 51 queries .

回顶部