QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】
$ ]. h* h" l( L/ n. |  j; P0 Z, i! m$ U5 E, c4 S( ]
        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。
) `6 H3 @$ w* f
2 g$ _9 D, X4 `% ^: k【输入格式】; H% N! w+ r! a) f7 i
0 t+ @/ W- D# f1 A# ?
        第一行包含两个整数 n 和 m。1 B+ i4 @9 f2 [
! E" R) f5 l( I2 K3 g
        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。( u+ Q' C: S8 J6 x8 r& c

/ D% h) T* S: r% C" P2 g# N) @【输出格式】
2 d/ ]% e: U# q' j8 f  V0 H$ c5 N+ f9 S; c. ]. k: o/ ~0 h* {
        输出一个整数,表示从左上角移动至右下角的最少移动次数。: @3 b' C" Q8 v' b
  ?) ~( o2 M  l3 ]. W
【数据范围】
* |: k! @9 E0 a  X' ^2 O
! k% B6 T2 Q  u) u+ ]& D! j        1≤n,m≤100# \/ r5 e( |% A) r* {+ n, I# J

8 F% H$ n  r  t; q# I  O【输入样例】
( F$ F4 n/ B! R( Q- s* N0 U7 h8 `% X+ F
5 5
* ~( k; O& K8 E* ?+ ^3 c$ g' q9 \0 1 0 0 0
4 r$ x8 i5 Q& f- C- Y. S3 S3 U( m9 J0 1 0 1 0
( }4 |* @& N4 U0 \  l! h4 f0 G0 0 0 0 0
1 _1 _8 O2 E+ n9 A- w0 1 1 1 0
# o4 u& q1 b5 p1 p' k" U, }6 P& \3 _0 0 0 1 0
5 x" k, V% ~- r; r% {; p& H【输出样例】: Y- Y2 V" x" Q) b" s- B" j
' W. ~* i$ d) n' ~  E' N& J
80 M8 p* H/ @1 L+ D
【解题思路】
; i; x& E3 t" \; s" V" B
) w  E! T. A. c        BFS的典中典。
  1. from collections import *, X% ~7 }. ]5 O6 ?0 A% v
  2. n,m = map(int,input().split())+ Z9 k, O1 E/ @4 u
  3. mp = [[0]*(m+5)]
    - X\" ]6 U0 [7 w\" X\" F* p) X$ z. w\" b
  4. for i in range(n):% c0 n0 a* I; Q! }
  5.     mp.append([0]+list(map(int,input().split())))
    ! j7 ^  P( c2 O7 j* g# f3 [
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]
    / _# L; b, |7 e; S$ y# p, K
  7. st = [[0]*(m+5) for _ in range(n+5)]
    & o& t9 D- L* Z& V8 M. Q  X: J
  8. def bfs():
    / f1 Y8 C4 I4 H
  9.     q = deque()3 _3 ~5 }5 I\" M3 W, o
  10.     q.append([1,1,0])# w* P; N6 G0 ]8 U* j- W9 B6 E
  11.     st[1][1]=1
    . J  F& N- j\" w- d/ H, P4 ~
  12.     while q:! k+ O* b2 N( j  }
  13.         tx,ty,step = q.popleft()\" k4 W( Z! Y- \4 [) x/ V
  14.         if tx==n and ty==m:8 D! `' F9 i+ Y! a, i
  15.             print(step): q. |$ A* X+ y: H0 ?
  16.             return. A3 V' o/ B! j# x3 f
  17.         for x_,y_ in dir:/ b3 v, C7 S' q5 v( Y7 n
  18.             nx,ny = tx+x_,ty+y_; T4 B+ x7 i: Y  v\" g. E! i/ P) d
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue0 L  s  }7 _% b  B% k
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue
    $ E; _% S' f& S\" b  ]: W
  21.             q.append( [nx,ny,step+1] )
    3 ~& T, Z! g6 f5 T
  22.             st[nx][ny]=1
    $ z4 {$ f# O7 Q+ ~% S6 c
  23. bfs()
复制代码
3 Z/ U, D) f7 Y' t  e8 v" H  M
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-9-27 14:16 , Processed in 0.303955 second(s), 51 queries .

回顶部