QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】
) o( H4 t! ~1 e+ W. V$ f0 ?) p' u* O5 `
        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。
8 W) {$ Z6 ?3 U+ ^* u0 j5 q* \$ d9 [- _2 R
【输入格式】
0 k  Z3 P  g% ^( _% h  G9 y
+ V1 F1 W! C: e* X        第一行包含两个整数 n 和 m。, M( r8 L1 F' s' }

  U0 E  A$ z4 d/ Y  O- I        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。% u( t2 p; V" a5 D

% A1 q; q( C$ {' S3 J3 \+ J【输出格式】8 _, k7 ]) I7 {: \5 ^$ u! H

6 {' ?) }: d" c. C1 g1 ]% U        输出一个整数,表示从左上角移动至右下角的最少移动次数。
+ ^" {  e  p7 v' O( D( q6 t, p
* k/ }& ^% t- W! V7 `! o4 ~/ }3 q【数据范围】* W* f. Y4 x/ k% j# }# \  p
) f7 [' K" @: W( ^6 \
        1≤n,m≤100
8 n; N" W% i8 x; ~7 K  l
# {8 F1 T" a, X0 k/ s# [$ R  q" e6 x- j【输入样例】
4 D) S7 ~/ L- ^9 i: t( e2 X
7 z5 A9 [7 \' o2 w( B/ j5 5
4 x* a7 s- R7 A0 l5 n0 1 0 0 0
1 g; l& @: n8 N/ _0 1 0 1 0+ V- k, i* N' T. x' p
0 0 0 0 08 U$ N5 J( E0 {" D+ x/ E' }4 V
0 1 1 1 0. O+ x2 H7 {$ S, S$ W
0 0 0 1 05 I3 `8 W5 z" E( v7 r' m  n4 [
【输出样例】! l. C+ u, }4 u
- |1 c# o  z- s8 [
8
( ^* C7 t7 t8 m/ f 【解题思路】
3 a- o' |( n5 u9 R) P9 \+ f5 \
* Y3 y  |  l2 S        BFS的典中典。
  1. from collections import *+ a: O1 @\" M' `5 c+ M
  2. n,m = map(int,input().split())
    5 n  g4 E# [9 b, t2 T+ b# G
  3. mp = [[0]*(m+5)]
    9 y* @# t) A8 e: }3 s
  4. for i in range(n):
    ; s8 D; s& Y9 R
  5.     mp.append([0]+list(map(int,input().split())))
    ( p- S1 f. ?\" V3 Q) d2 r3 k2 K
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]2 z7 l5 G* R+ @
  7. st = [[0]*(m+5) for _ in range(n+5)]' K8 N7 p# H/ @
  8. def bfs():7 u\" H# T& o) R0 V
  9.     q = deque(). o7 P9 }3 r/ V7 ^. v; Y  L: y
  10.     q.append([1,1,0])
    5 D/ ^5 _2 _- r
  11.     st[1][1]=1
    + I8 G/ q5 f. P+ k& }
  12.     while q:
    ( }4 w# r- M1 L6 l4 R
  13.         tx,ty,step = q.popleft()% w4 O9 _+ ~  W; O; j6 ^) n
  14.         if tx==n and ty==m:
    + _/ D) m% O9 w2 S/ d; Z6 J' B4 T
  15.             print(step)
    * z5 n* k. E: X5 G
  16.             return
    , Y. Y+ p4 N. C3 a
  17.         for x_,y_ in dir:
    , K2 @+ Y: s; S: x8 i& E
  18.             nx,ny = tx+x_,ty+y_/ g% c# ~$ k- d+ z\" H
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue6 z9 V2 t6 f6 Q6 O
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue* s/ L' k* A0 U0 B. A7 B5 y% C8 U
  21.             q.append( [nx,ny,step+1] )# y3 H& H: ?6 ~+ x7 M( Z# `' p9 G6 R
  22.             st[nx][ny]=1  d3 Z& m2 d- G2 {- N
  23. bfs()
复制代码

# e' B4 D( k: @; F3 M& M- m+ r5 [
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-4-13 03:03 , Processed in 0.417374 second(s), 51 queries .

回顶部