QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】' Y& j. s, ]  t+ C' T9 c( J# C

3 V) w2 v- o  E% M        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。
# w. w/ j3 {( S( W
) [! u2 N& A5 j8 E4 h6 O1 N【输入格式】: @9 g/ K& ^5 ]. R9 \8 n8 U* s
0 i* Q3 b6 n1 K/ I
        第一行包含两个整数 n 和 m。
# D! }- v  q8 x* Y# h9 B5 _6 D2 @6 ?4 ]$ }
        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
- F' A* J: l6 y
5 S. M( D, K6 r9 ^( ^【输出格式】1 }" B& s/ B  O  H$ F9 L

4 g  y+ k# Q) \3 K3 h        输出一个整数,表示从左上角移动至右下角的最少移动次数。
, e1 C% {, C8 G- q  [; ?
# E$ f/ x0 {9 s【数据范围】/ q: x3 O3 y( T

0 }; d. G5 J' N" c        1≤n,m≤100
, O- J5 {+ @/ _0 M& C% L% v
7 D- e8 b3 i" n8 |) h) c) ~【输入样例】
- k, T. |5 n# O+ g+ [( b0 ?
. d% O* S; O2 w! W" Q3 \+ C2 [, N- v5 55 O0 O3 p# d' X0 d
0 1 0 0 0& n1 Z6 i9 R# v/ j3 _* d0 |1 x
0 1 0 1 0* @6 M# j' q$ ^* m9 l
0 0 0 0 0
: M) E4 p3 ~6 |  W! O0 1 1 1 0
( `. y, C; u+ b( `4 a0 0 0 1 0
- m: n( ?& }0 X  ]9 Y) y& G; }6 t【输出样例】5 \+ v; C+ N* t& r& a7 X! ~0 s& O
% `/ @4 o- I+ n
84 \' k( S+ x( |
【解题思路】
+ v- a, {; e: T; \. Y; N
! |4 K( ~2 D& Y! S        BFS的典中典。
  1. from collections import *
    1 }& m1 ?( Z% b1 u3 b# K  j\" h
  2. n,m = map(int,input().split())
    4 i9 ~: f0 D7 U1 M\" Y+ m
  3. mp = [[0]*(m+5)]7 a/ r6 D; h0 a- F$ ~6 }/ }# D; V. ?
  4. for i in range(n):
    : l/ J  }# `, L( b! C
  5.     mp.append([0]+list(map(int,input().split())))
    $ `8 ]3 a. F1 n; f
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]$ a; A. `% }- W3 N  T
  7. st = [[0]*(m+5) for _ in range(n+5)]: k6 O& u* |/ P  @8 q
  8. def bfs():, B7 r6 W* K* [, _4 U
  9.     q = deque()
    # c\" p; X! z  e
  10.     q.append([1,1,0]); z* C. _2 B# L5 f- Q5 D9 M( J* m
  11.     st[1][1]=16 d: w6 U' P8 F6 e5 ?5 f8 j% n
  12.     while q:: i/ Z, g. o5 \: S, B
  13.         tx,ty,step = q.popleft()  D* d2 o; D) ~$ L
  14.         if tx==n and ty==m:
    , a# m  }# H1 ]8 M8 Y# q
  15.             print(step)9 N1 d8 ?# l1 P7 f9 s! s( S
  16.             return  \. c: s1 `7 c1 f; R
  17.         for x_,y_ in dir:) W* c! @' c5 L: q* F) v) L8 c
  18.             nx,ny = tx+x_,ty+y_. U( U; x0 T* e
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue
    & k3 C$ U' q5 f/ f) m\" M
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue
    8 T: O1 T) Z% N) r% W4 N8 ]2 |/ i
  21.             q.append( [nx,ny,step+1] )5 F8 Z8 S% W! x0 H2 O6 L
  22.             st[nx][ny]=1
    4 r- ~; T+ A- E. }& }5 x
  23. bfs()
复制代码

" @) c: `, |9 N
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-10 17:26 , Processed in 0.311649 second(s), 51 queries .

回顶部