QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】7 g( u2 P$ K2 k1 d( i9 t
. r0 i" Y+ S/ z7 }) }9 V8 f
        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。9 S: ]5 ~; A0 h1 t) ]+ a5 T
+ L) k+ T: X" q; d( a; V
【输入格式】6 [* j% R4 z7 k& R
5 Y$ Z/ M: k" C6 T/ f4 Q+ G; X
        第一行包含两个整数 n 和 m。  }& n- T# u) n6 r8 a
3 F9 w0 d' Y6 F4 C8 a$ _
        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
8 x% s2 n2 K+ ]' W3 s+ B: s0 P1 W" ?0 B& z  J% f! m8 \
【输出格式】! v9 s$ Z- X0 x/ G
* k# S1 Z- V/ _# E
        输出一个整数,表示从左上角移动至右下角的最少移动次数。
* b# A5 \/ K  V# {% J( x" q2 B/ I: u
【数据范围】
/ Y/ D, v" S) E& S) A- E* C
* Q, j; }0 m# G, `* G+ B        1≤n,m≤1009 Q: m0 D& K& V. b) K- z! X8 p
( r4 ?3 u6 d4 T3 M+ }  h
【输入样例】
4 x! K! N- U6 B# k6 O' z* |9 R; F' p0 ?; m) O
5 5
5 H+ Y2 `$ T- Z0 o. {0 1 0 0 0
  x2 R9 ]2 [* t9 c5 e0 1 0 1 0* p+ d0 B$ w- W! _% y3 K
0 0 0 0 0# B- l3 p! ^9 j6 l' F* e9 l
0 1 1 1 0& ?& @# S6 H% G1 O% I
0 0 0 1 0
; A+ A( f" z4 }0 u# R5 M, S# |: Z【输出样例】
; \$ g. r) z) x! F1 ?: z5 Q( G- y) d' v+ ]  p
8% c& e. |. x+ {2 c
【解题思路】
" [/ ?( U# O& A" T# Q; ~7 }3 m
" C: ]/ l0 w8 }  U# T5 u# Q: n        BFS的典中典。
  1. from collections import *
    , i# P& K. ^, x7 z# T7 e
  2. n,m = map(int,input().split()). w: \- z, B: m0 S! c
  3. mp = [[0]*(m+5)]+ r! Y( O( [& @% X: L1 S\" ]1 R/ O
  4. for i in range(n):/ S\" Q( e& s0 m; c2 P0 s
  5.     mp.append([0]+list(map(int,input().split())))( {. z. B- W) |+ G1 I+ s# J
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]! A) h) ^7 R. O
  7. st = [[0]*(m+5) for _ in range(n+5)]
    1 K  A8 C. q; o( d; W8 N
  8. def bfs():& O6 X) Z( v! I8 j3 _, R$ [\" o9 o
  9.     q = deque()
    - Q( H6 g3 N! M8 K7 [
  10.     q.append([1,1,0])\" t9 Q# p8 X0 {1 u5 g- N$ H% V
  11.     st[1][1]=12 ^  D. ]- W1 O  a/ I6 @
  12.     while q:- E2 Q# k9 U, n7 r9 a
  13.         tx,ty,step = q.popleft(). G# a4 b\" J& W. m\" w) U7 B  w
  14.         if tx==n and ty==m:\" I6 ?) ], m& X# Y6 B* ?
  15.             print(step), Y4 ?% u# N8 J+ z: `5 y
  16.             return8 T; e\" Y) {  R+ X, c
  17.         for x_,y_ in dir:
    * |! e/ @9 I) l* @4 F5 U
  18.             nx,ny = tx+x_,ty+y_8 m# R: _0 b% _\" y3 {
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue6 H  b8 p8 ]' E* p* @* |7 V
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue
    9 w: X! z+ _4 x4 O1 P
  21.             q.append( [nx,ny,step+1] )
    + t' Y& a  H4 \  ~+ a
  22.             st[nx][ny]=1
    : m6 X$ J\" N\" q- z
  23. bfs()
复制代码

, {* U. ?/ T2 j0 I  U5 c
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-8-4 15:32 , Processed in 0.432102 second(s), 51 queries .

回顶部