- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
题目描述】' z% [; D0 h1 U6 C6 R" p& ~( [# N
& u f: ]+ ^5 {1 p* D; {( w9 \6 c
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。3 g; w _( P2 m$ F! q( c6 X
4 ^ W3 W2 ~. o! G0 |3 c( a# K) {【输入格式】% ^, P5 V' A5 m& v) }- i
! e" q# ?( |& Q. l( U2 x l' m l 第一行包含两个整数 n 和 m。
# _# d: _ x7 H7 r* q% m. D9 R3 m7 l R7 D
接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。. {0 G# U7 h! g+ @
$ T: y1 o( c1 X$ `: w【输出格式】
8 p7 K0 ]: h: x- Q' _9 m- x- @ q( C( O8 z( S2 c) Q
输出一个整数,表示从左上角移动至右下角的最少移动次数。
' p' ~2 {' M6 x9 N2 [; n6 Q+ b1 R9 @6 u7 S# W4 D1 r, n) X
【数据范围】
# c( }9 h# M6 X/ w2 J' H2 R; W: M' Q& [5 P6 K, r; `6 ?' `" t9 U" O
1≤n,m≤100' W! D7 J) V. T/ A
6 p% g* L3 H+ ?0 ^" @/ j【输入样例】
; ?" k0 \# ^) T: U6 m( K: q+ D4 F+ X, x( _ b
5 5; [" O5 k- L. [2 O: ?2 t: p
0 1 0 0 0
# Y h Z2 s H% f( p. p& A0 1 0 1 0, B& z/ ]6 P+ ^; J) ^
0 0 0 0 0
- b: c, w3 Y. g" H# n6 m0 1 1 1 0
X2 M$ E' Q ]* i/ Y0 0 0 1 0
" d: W/ I7 Y/ f【输出样例】2 |: D, h. Z' Y1 n
' f4 X+ ?( X0 A; x
83 c9 h. }9 t: w5 P9 G
【解题思路】6 E% O6 b1 A% o3 Z0 C! j- }& p4 w4 g1 ?
& F& p6 c/ S0 ~
BFS的典中典。- from collections import *
0 ]& ^2 h$ i! e* Q2 C - n,m = map(int,input().split()) [7 d) l) `5 L
- mp = [[0]*(m+5)]
1 T; Y9 `0 u( D/ r0 | - for i in range(n):
( u1 }1 i s, m - mp.append([0]+list(map(int,input().split())))6 B, d. ^7 x+ t3 q4 f3 S
- dir = [(1,0),(-1,0),(0,1),(0,-1)]1 b& h& N3 Q* h o# W. ~, [9 ^
- st = [[0]*(m+5) for _ in range(n+5)]. C) b& j' A3 P( z3 g
- def bfs():8 t# [, j\" C' t6 R& u( z
- q = deque()0 E0 o% R, H z+ y. \
- q.append([1,1,0])6 K, u6 `6 x v; s3 S
- st[1][1]=12 f$ @3 m( q* Y# }+ P1 e& e2 y& c7 O
- while q:
& _; A6 P2 m- Y0 A% L - tx,ty,step = q.popleft()* n' u/ o; f# R6 o5 ]
- if tx==n and ty==m:
- U( h8 k* V; e* r0 H4 _9 Z# A - print(step)4 u. Q# V2 ]5 t
- return% A/ @ g7 C Q- Q% c3 f' l
- for x_,y_ in dir:
% P/ W' k/ g- G7 i - nx,ny = tx+x_,ty+y_
9 e8 V! b/ _& x. L- D; m$ [! ^ - if nx<1 or nx>n or ny<1 or ny>m:continue\" X1 m( |) R$ v( _7 u2 q( g
- if mp[nx][ny]==1 or st[nx][ny]:continue
z! v: f+ j6 `& |2 a2 u1 \4 W - q.append( [nx,ny,step+1] )4 {9 u: o3 Y% [4 ?# G1 i- v+ a
- st[nx][ny]=16 F! ?8 ?5 ?) O: _8 B
- bfs()
复制代码
+ u" G' }8 c8 e8 U; _5 K |
zan
|