- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】0 M9 u# M; a+ n. }. g
; R3 F9 w( Y5 M2 ?
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。& J }; O2 E8 m
. P! P. r! N( F( Z
【输入格式】% P8 ?- l/ z6 N0 P: e! [
8 A5 c, ]/ P/ t: L' ]
第一行包含两个整数 n 和 m。
9 R7 f- K; c- L, J- D- s" K! e( r% f. t2 _
接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
' b# C1 E& q/ ~( I; o4 m1 x& Q8 W/ b2 U$ H) k/ `+ r* [
【输出格式】
, J; }1 u2 d) Q1 Z/ P, V
9 N0 s5 D! m( ^2 Y i 输出一个整数,表示从左上角移动至右下角的最少移动次数。5 Z8 W9 n" ?/ j
% b. u- v) ^, B
【数据范围】! p6 V3 Q' s0 M( d' E) J* T
' |6 |& k8 y* N Q0 s0 w/ B
1≤n,m≤100
- d! `+ J9 @6 @% ~
0 S) m! \/ [) X; |) j1 k% e【输入样例】
9 F* p: U, Q7 I0 f
! [0 k+ x2 H! i1 h5 5: I6 l( b, Q+ d
0 1 0 0 07 B7 c) u; ~$ {+ D2 _
0 1 0 1 0. T( r. v5 d" @, P; ?/ |- Y, r
0 0 0 0 00 N: ^1 `$ M# E2 o. ~" z( d8 r& e
0 1 1 1 0
- j. b% ^0 \0 ]* r# p0 0 0 1 0, P7 u0 H0 N/ I9 x$ ]
【输出样例】: @+ @( `" U% n
3 S! s6 I Y6 `89 h: C5 R$ M* D+ s) K/ m- }
【解题思路】8 [- t/ n z# e& W* \2 ~
% o2 W5 \; x3 L' p) \2 F) F BFS的典中典。- from collections import *\" K\" R1 S- n' X3 x) `) {0 T
- n,m = map(int,input().split())' l7 W- t+ h2 v7 @% |0 R9 M! w3 u
- mp = [[0]*(m+5)]
9 R# E/ ~- k: G# B+ K- H* X - for i in range(n):2 y& l% g$ M. t4 U$ q; V
- mp.append([0]+list(map(int,input().split())))% q5 }, R# F\" _; n
- dir = [(1,0),(-1,0),(0,1),(0,-1)]
8 O4 Y$ L, v2 {2 u2 ~. ^\" c - st = [[0]*(m+5) for _ in range(n+5)]
5 J* K- k Q, }3 n. v - def bfs():
$ H- B( G% u5 Q, a - q = deque()
1 Z5 l( k9 |! J. {: ?* u( {; T - q.append([1,1,0])
/ {- p& H! j6 e, e1 j8 R - st[1][1]=1
0 m Q( u; ^) a& c3 c - while q:
- A\" @- Q6 E6 Q\" l - tx,ty,step = q.popleft()
0 q5 Y/ `! s8 g9 M# l x; q - if tx==n and ty==m:3 f$ I0 P. e: K9 y3 u! J+ z
- print(step)
* y; r6 v3 j/ I: m; {3 a - return- R% q+ K$ B9 Y! ^
- for x_,y_ in dir:
: Y: ]5 ]- A! | M) Y\" |4 } - nx,ny = tx+x_,ty+y_
% J9 W7 V& Z\" a7 q% c t% j - if nx<1 or nx>n or ny<1 or ny>m:continue3 j* P: e% K3 D9 Z3 E& _\" }
- if mp[nx][ny]==1 or st[nx][ny]:continue b1 _( n( d6 Y$ t! I3 b, a
- q.append( [nx,ny,step+1] )
4 a/ H) P/ X* z! S% L% k - st[nx][ny]=1
9 f2 Q5 V7 `5 f8 e' q - bfs()
复制代码
! H! ^" T4 `$ D0 G0 B7 h. k |
zan
|