QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】0 M9 u# M; a+ n. }. g
; R3 F9 w( Y5 M2 ?
        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。& J  }; O2 E8 m
. P! P. r! N( F( Z
【输入格式】% P8 ?- l/ z6 N0 P: e! [
8 A5 c, ]/ P/ t: L' ]
        第一行包含两个整数 n 和 m。
9 R7 f- K; c- L, J- D- s" K! e( r% f. t2 _
        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
' b# C1 E& q/ ~( I; o4 m1 x& Q8 W/ b2 U$ H) k/ `+ r* [
【输出格式】
, J; }1 u2 d) Q1 Z/ P, V
9 N0 s5 D! m( ^2 Y  i        输出一个整数,表示从左上角移动至右下角的最少移动次数。5 Z8 W9 n" ?/ j
% b. u- v) ^, B
【数据范围】! p6 V3 Q' s0 M( d' E) J* T
' |6 |& k8 y* N  Q0 s0 w/ B
        1≤n,m≤100
- d! `+ J9 @6 @% ~
0 S) m! \/ [) X; |) j1 k% e【输入样例】
9 F* p: U, Q7 I0 f
! [0 k+ x2 H! i1 h5 5: I6 l( b, Q+ d
0 1 0 0 07 B7 c) u; ~$ {+ D2 _
0 1 0 1 0. T( r. v5 d" @, P; ?/ |- Y, r
0 0 0 0 00 N: ^1 `$ M# E2 o. ~" z( d8 r& e
0 1 1 1 0
- j. b% ^0 \0 ]* r# p0 0 0 1 0, P7 u0 H0 N/ I9 x$ ]
【输出样例】: @+ @( `" U% n

3 S! s6 I  Y6 `89 h: C5 R$ M* D+ s) K/ m- }
【解题思路】8 [- t/ n  z# e& W* \2 ~

% o2 W5 \; x3 L' p) \2 F) F        BFS的典中典。
  1. from collections import *\" K\" R1 S- n' X3 x) `) {0 T
  2. n,m = map(int,input().split())' l7 W- t+ h2 v7 @% |0 R9 M! w3 u
  3. mp = [[0]*(m+5)]
    9 R# E/ ~- k: G# B+ K- H* X
  4. for i in range(n):2 y& l% g$ M. t4 U$ q; V
  5.     mp.append([0]+list(map(int,input().split())))% q5 }, R# F\" _; n
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]
    8 O4 Y$ L, v2 {2 u2 ~. ^\" c
  7. st = [[0]*(m+5) for _ in range(n+5)]
    5 J* K- k  Q, }3 n. v
  8. def bfs():
    $ H- B( G% u5 Q, a
  9.     q = deque()
    1 Z5 l( k9 |! J. {: ?* u( {; T
  10.     q.append([1,1,0])
    / {- p& H! j6 e, e1 j8 R
  11.     st[1][1]=1
    0 m  Q( u; ^) a& c3 c
  12.     while q:
    - A\" @- Q6 E6 Q\" l
  13.         tx,ty,step = q.popleft()
    0 q5 Y/ `! s8 g9 M# l  x; q
  14.         if tx==n and ty==m:3 f$ I0 P. e: K9 y3 u! J+ z
  15.             print(step)
    * y; r6 v3 j/ I: m; {3 a
  16.             return- R% q+ K$ B9 Y! ^
  17.         for x_,y_ in dir:
    : Y: ]5 ]- A! |  M) Y\" |4 }
  18.             nx,ny = tx+x_,ty+y_
    % J9 W7 V& Z\" a7 q% c  t% j
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue3 j* P: e% K3 D9 Z3 E& _\" }
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue  b1 _( n( d6 Y$ t! I3 b, a
  21.             q.append( [nx,ny,step+1] )
    4 a/ H) P/ X* z! S% L% k
  22.             st[nx][ny]=1
    9 f2 Q5 V7 `5 f8 e' q
  23. bfs()
复制代码

! H! ^" T4 `$ D0 G0 B7 h. k
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-9-27 15:04 , Processed in 0.300460 second(s), 51 queries .

回顶部