- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】 D$ U y/ a' S& w$ h9 l6 p
' _1 e6 E7 B! _. O
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。3 t2 r# O! k( }3 J$ A
) ^: Y: @3 R9 p) G% U! r y【输入格式】+ t, |$ h% h3 a4 n7 ]' T8 ~ T6 U+ [
- D# `3 }7 S, V
第一行包含两个整数 n 和 m。 o' v- }8 K4 }! f* a& ^5 J
- c% b" C3 @2 ?% ?: o 接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
a! c6 t, y- Z! Y( j% N1 N# { z u3 f* C ] y* Z
【输出格式】3 m, q2 k; f( L. r
( w( c" l2 X" h- l2 Y9 d1 K$ C 输出一个整数,表示从左上角移动至右下角的最少移动次数。
5 K6 z7 z( j# v5 X2 `, G, P) o2 @- I+ `# j- G+ v$ U# J0 I
【数据范围】! ~2 u, `5 d7 T6 [
' p) R0 D# D/ A* ^' j* L: a 1≤n,m≤100
8 q' e6 h; X4 O* C5 H
) N- u4 A6 P3 V# m【输入样例】
# D3 H$ ^1 S( b# Y& V6 U0 y: t7 E2 r( I1 Z! |
5 5/ \/ R* M+ F7 X8 A* I, r7 t: P
0 1 0 0 0
1 a( h* ?+ F S+ y6 j/ T$ N0 1 0 1 0
, V8 _) ?' r- i: W7 P: U' q) D. ^0 0 0 0 0
% z* O: ^1 C' h: C0 1 1 1 0" i. Q& K) k& `8 b
0 0 0 1 0
" |0 ~! N2 ], Z. A【输出样例】; { g) p- F9 C, C
+ p& K6 \! z; K8
. z9 C0 ^" W h9 ]* }1 e" F& ]9 N 【解题思路】. Y3 m, D' o0 j/ g) Z
: p0 X/ F( t8 }2 f( e3 @ BFS的典中典。- from collections import *. {1 c: {# ~& K6 I% K0 w
- n,m = map(int,input().split())
4 T6 K$ Z$ ]/ N# o \+ F - mp = [[0]*(m+5)]
. w( i; F\" ?. B - for i in range(n):& J: ]+ V% ?7 L\" l
- mp.append([0]+list(map(int,input().split()))), r9 z% P) a v/ g, x\" j: R, @
- dir = [(1,0),(-1,0),(0,1),(0,-1)]8 a- c8 @/ i x/ d9 Y* m/ q
- st = [[0]*(m+5) for _ in range(n+5)]
) x+ f+ L' n# O% M3 J! ] - def bfs():2 F' Y3 d8 ]% j( h
- q = deque()% A2 g( D7 M+ _# C
- q.append([1,1,0])# {0 o, f0 f; d* u- u8 l
- st[1][1]=1
( W# _2 q! z8 K - while q:/ k! _7 z, R\" W( a+ t/ y4 f
- tx,ty,step = q.popleft()
\" V% {& u2 A+ n3 |4 F$ i& U - if tx==n and ty==m:
- n' `; q4 p, d6 d+ B - print(step)+ K- R3 D6 C0 @/ x4 B: N9 p! K
- return( u2 C+ a- O2 i+ j2 w3 r4 E
- for x_,y_ in dir:
! a4 ?. b/ [' e& W7 @/ B* Z2 { - nx,ny = tx+x_,ty+y_1 ^6 Y9 Y\" j& p' z& g. @4 v& W( q
- if nx<1 or nx>n or ny<1 or ny>m:continue
\" y$ D! [. j6 r% o4 [9 t - if mp[nx][ny]==1 or st[nx][ny]:continue
; f' N. G0 R! }\" \. Y0 q4 w% v - q.append( [nx,ny,step+1] )
8 x7 g& p z1 d0 f - st[nx][ny]=1
; f. |& F3 D6 H - bfs()
复制代码
* s* x2 Q. W* I, ` ^$ v |
zan
|