QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】
+ Z* B" |( ?3 W- y( p; N6 U8 r1 V5 m- S) K# d. _' m
        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。& b* V+ q' d" I' k$ w! H
- m: s: A7 j9 j3 i+ t0 z
【输入格式】$ [' o6 ~5 x0 C' B7 x
* _5 K" k5 G, p# V8 }/ |5 L
        第一行包含两个整数 n 和 m。5 w8 ?1 X1 Y1 j4 J

- M0 x3 ?( g# T7 }) Q5 o  s        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
7 i) A' l$ g( V7 a5 S/ H- @
# u3 V; O. t, Q. @: w6 I【输出格式】
5 J4 Z& u4 D" W' ?+ L! r% n4 a0 L5 M6 L
        输出一个整数,表示从左上角移动至右下角的最少移动次数。
' \' x- W+ }0 C8 _" l
2 P( [# a" X9 W7 s【数据范围】
$ E: B9 C) |" a% M
1 }0 }% }& K. x        1≤n,m≤100$ |' J6 W! t( p! H
8 c9 S! l% y* {8 h) v( S
【输入样例】  ]# O9 [7 Q4 I+ H: Z3 F3 v

* o: ~  C' S; h, @/ `9 H5 59 z- i8 m& o0 F/ ?% ~
0 1 0 0 0
8 d! h+ z# Q& I+ J  b0 1 0 1 0
5 s! U' e( Z7 w0 0 0 0 0( ^* Z. ]! I' |- f+ w0 P+ l8 |( K
0 1 1 1 0
6 d, ?, w8 o/ S0 g0 0 0 1 0
; s2 V+ J5 i8 H* U+ W, x【输出样例】6 L9 z) [7 @1 ]' w2 x: t: O

! ?% X6 X9 m2 C. }9 B( q8
9 E2 I* W0 S% h 【解题思路】, q) [7 w' ?) i0 w

  }. e- {9 ]' a1 }; W        BFS的典中典。
  1. from collections import *
    , z5 n' v- z/ y4 h  B9 C
  2. n,m = map(int,input().split())/ j+ \+ c7 ~# L- `) I7 k, `$ f
  3. mp = [[0]*(m+5)]! m0 A7 p! a/ y& s: b- b2 K) ~
  4. for i in range(n):6 J) a, ~; Q\" @  {4 F: _
  5.     mp.append([0]+list(map(int,input().split())))
    1 |' R9 {' P; V% v+ {; k: T: P6 h
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]6 M1 z* Z. Z, D\" \. o/ D
  7. st = [[0]*(m+5) for _ in range(n+5)]# g, t% g* \\" r. M  b1 z  x8 t
  8. def bfs():
      v- R5 |! _2 v1 d/ J
  9.     q = deque()0 I# G% L/ R' ?1 q0 B) d: Y; h
  10.     q.append([1,1,0])+ M3 a3 }3 N! i) k& s
  11.     st[1][1]=1. o  Z! u9 `( }$ T) U
  12.     while q:
    0 o) y# ?! q/ |\" d8 g$ c
  13.         tx,ty,step = q.popleft()- M/ g8 I, H. C9 y* M
  14.         if tx==n and ty==m:
    $ j$ G% X. Q( F- y( F
  15.             print(step)* a( @2 Z. A4 ^: F2 b1 t# g# p
  16.             return: h\" D- P. w# k
  17.         for x_,y_ in dir:* z% c8 c( i. a+ F, O
  18.             nx,ny = tx+x_,ty+y_7 U! u; ?1 x$ |  h
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue9 S! s3 l: q! p5 S% Z) y' \1 }
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue
      J! L) b# N* e1 B
  21.             q.append( [nx,ny,step+1] )5 }  P6 f( h- h0 H7 o
  22.             st[nx][ny]=1
    ; ?' O1 J' i: a3 B
  23. bfs()
复制代码
  w- e( u8 E* p% G# A
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-14 20:02 , Processed in 0.395827 second(s), 51 queries .

回顶部