QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】
+ d. g$ [; P4 B- _/ F
3 L. X  p' f( r9 m7 h+ u        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。
8 F( j, Z/ j- n( U7 d. H; F9 M
3 w7 M- B' R( O! i$ M+ j【输入格式】* L; B. `; S' d2 y
, K+ {7 v: w/ s- Q. ~/ E
        第一行包含两个整数 n 和 m。
- F! c3 _2 c/ ~$ k4 }- g' ]- {' W# x& x
        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
$ J( v2 L5 [9 ^$ M6 B% Y
8 e0 I' [1 Q% g. Z; V【输出格式】3 O1 R7 y( |! D/ N
. Y+ E! o- A6 {' X+ ^1 U
        输出一个整数,表示从左上角移动至右下角的最少移动次数。
; |' p5 \2 J4 K; S/ w' i$ n! D
2 X: Y8 A) N$ J: q( C) c【数据范围】( L; _7 G9 v1 L- w6 P

4 M9 W1 t, T8 K' U) f1 E        1≤n,m≤1007 D! d5 ^; R- v3 X! j6 t; b
, y9 q& K/ b' O  I9 |
【输入样例】# M0 }" X, u9 o

% a$ O  }- s: n$ O1 ~$ _5 j- f5 5& v8 [( d* O* J6 ~" m: J3 x) M
0 1 0 0 0% \2 C; d# G. I! I& H8 h
0 1 0 1 0
/ H+ R2 g. f' _" `; I7 h+ d0 0 0 0 0
  Q. i- d: R. ?! R1 C7 b$ K! T0 1 1 1 00 p9 R9 h; b' c7 C3 R( Z
0 0 0 1 0
& v1 a* {5 Y1 G【输出样例】
9 b+ o. ]9 T+ l& S/ d1 {' f# c) O+ D# c
8- L7 O: j1 ]- m6 ^2 Z8 g
【解题思路】
6 K, l* U: U4 ]) C" w7 Q4 r! d, X+ }9 F( q! n9 g7 [
        BFS的典中典。
  1. from collections import *
    0 b5 i) c$ q. U7 ~
  2. n,m = map(int,input().split())3 A% L) }9 k: e* Y: V
  3. mp = [[0]*(m+5)]$ h9 D7 `, g1 X) N& C& x
  4. for i in range(n):
    ) v9 `9 Q* L0 A- w& ^/ F2 t
  5.     mp.append([0]+list(map(int,input().split())))
    ( Z$ \: i/ z& I: `4 r% e
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]\" G8 e: e( k3 ?9 G
  7. st = [[0]*(m+5) for _ in range(n+5)]! F2 y; e3 ~* t# [2 d. {
  8. def bfs():$ p3 w0 d, U) @7 Y2 l
  9.     q = deque()1 _% g0 b5 v\" n# |' `; P
  10.     q.append([1,1,0])
    0 t, {( h  o, s' @6 n2 |
  11.     st[1][1]=1
    # o, x2 ]3 m: C  Q2 T$ I! R8 o9 y\" O
  12.     while q:
    9 ?! G% v$ F$ X2 }9 p& W
  13.         tx,ty,step = q.popleft()
    2 |( r# V( S2 X9 _. `' m
  14.         if tx==n and ty==m:
    9 c( A) U$ J( w3 Q! f( R
  15.             print(step)
    / X4 u. w: J2 v/ t; d: x: a
  16.             return
    ) L( ?! D& g/ f, ?\" U
  17.         for x_,y_ in dir:
    ) \4 M& P* U4 R\" L& w
  18.             nx,ny = tx+x_,ty+y_
    6 a. K5 V3 h% {8 p* E
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue0 N5 L8 N# w) f& }\" \# [
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue$ ]- l( G% ]: \2 i3 D6 c
  21.             q.append( [nx,ny,step+1] )! x/ \. c: t: O4 a5 D' K
  22.             st[nx][ny]=17 b8 g) m) F# ~
  23. bfs()
复制代码
; v6 i, l; U  E' 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-7-31 16:07 , Processed in 0.399310 second(s), 51 queries .

回顶部