在线时间 482 小时 最后登录 2026-9-11 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7953 点 威望 0 点 阅读权限 255 积分 2978 相册 0 日志 0 记录 0 帖子 1183 主题 1198 精华 0 分享 0 好友 1
该用户从未签到
题目描述】
6 b. l1 o8 Z6 J0 s5 D- F, I
5 f3 D$ ^, ~ E* h 给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。
" g4 {" g% `1 J4 g1 q% C2 ?
2 R2 R( d: v" J 【输入格式】9 f! A5 a3 b9 L9 y2 X
) j' W G, u1 h* X! H; W5 I 第一行包含两个整数 n 和 m。
* _2 m1 ^+ a& S$ b( E
5 G. v8 M% ~7 d# T( |7 C 接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
% p W! q9 Q) y6 n' I' x; R % m" [' n, f1 \0 h) S' ?9 n2 T
【输出格式】) e' B4 {% K4 _/ b' ~+ c) b* u
8 E- v# v. i h3 U7 c 输出一个整数,表示从左上角移动至右下角的最少移动次数。2 m' w- {8 x$ O" o* E" [+ e
) c8 _# K+ s" n! d' k: v 【数据范围】
& a4 C- H) a8 J1 P( l B7 w4 g " C5 q' D: [% M
1≤n,m≤100
$ Y- ]$ V5 O: Z" o# o " X! Y5 S1 A# r; i% D
【输入样例】7 l9 t1 A1 _9 C/ p" g* {
0 _$ ?1 F: H( ^
5 5
% k- u0 K8 k: `# O( z 0 1 0 0 0
1 d2 X' y2 W4 b9 q/ v/ g7 K7 y 0 1 0 1 0
# u3 f1 ~) U2 h( v, d 0 0 0 0 0
" k- k" \/ ?4 Z X! ^( @ 0 1 1 1 02 o. a5 M+ }1 H P, a8 |4 @
0 0 0 1 0
0 Y# F, @; t6 Q3 F- \. Q 【输出样例】
3 A1 v5 @- _- L* \1 n! v, p
H& R6 M: q- H2 r5 ` 8
5 K: a) d# r8 O4 \+ u- B 【解题思路】- G6 A7 I! y2 M4 Q1 P$ q
+ C/ Q1 B8 d6 \' V8 D) O2 S/ u
BFS的典中典。from collections import *
# {9 s0 X) L6 X3 k n! g* l$ t n,m = map(int,input().split())* ^! a5 E3 [: G\" g\" i
mp = [[0]*(m+5)]1 N$ d' r) w( \7 t( f
for i in range(n):+ _. U! T- _9 w
mp.append([0]+list(map(int,input().split())))9 e! x- G0 S5 C. L% k* u2 Y
dir = [(1,0),(-1,0),(0,1),(0,-1)]/ Q$ c9 l: ~9 o* b3 s# z
st = [[0]*(m+5) for _ in range(n+5)]\" ]* T# P! E; `
def bfs():; X7 ~2 C) e Z: @
q = deque()' E. l' M6 o: b8 n& h
q.append([1,1,0])0 }( D% |* Q# W+ N/ J; A
st[1][1]=1
) r! }+ Q# \: H3 t _ while q:! ^8 z: l* Y( s# i+ p
tx,ty,step = q.popleft()' D; e# k\" e* N9 d% ^2 b7 k# Q! a
if tx==n and ty==m:
# G1 V1 U/ Z! I% m m print(step)
9 Z5 H3 B( L1 L return& E \. O$ L) D) t
for x_,y_ in dir:
\" j Q3 x. O+ S7 e* O9 |# V& h nx,ny = tx+x_,ty+y_0 ^* I( i\" q8 z/ v, ^1 @
if nx<1 or nx>n or ny<1 or ny>m:continue5 a; V6 |1 _, L
if mp[nx][ny]==1 or st[nx][ny]:continue! y2 c- v( H! y8 V2 b. Z& B/ i
q.append( [nx,ny,step+1] )
& w& w y& L; Y& A) u- T) w; \ st[nx][ny]=14 S& A2 H; I7 x1 ?' @
bfs() 复制代码 " k( U2 R5 Q h; A# V5 K0 X( l
zan