QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】- S) {: k! S/ U& [6 L

- f( d# k7 O/ E% I( `        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。: n; Q  _3 C; S- Z0 x* i# a0 z6 J

  v0 k5 U/ g9 u1 P+ ^; B【输入格式】
) e# s$ H) e9 L2 p  g4 H
; [' g! a" f! A; @% m) z; y  q7 k        第一行包含两个整数 n 和 m。
& b9 W- g) {1 l6 `$ J6 ?0 h% X+ R1 [$ L7 j' F4 f
        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。& ]: E. m% X8 k9 y- R

  t4 V6 K  T4 U, q【输出格式】
- [( m1 z9 W0 w( w
. f' T: j. H0 _0 E        输出一个整数,表示从左上角移动至右下角的最少移动次数。- j1 K6 l% ^1 {* [0 I8 N% N
0 g( |: a  w( A9 ]0 O
【数据范围】' z0 A1 R" G$ X. r% m! D  J' |

) b' W$ t# C! d* K  y        1≤n,m≤100
6 ]: ^( f5 g# w& V& {" v( |' d/ F
2 {+ b% A% l( _4 ~! |) o4 s【输入样例】6 N) B; z: O- i( g

) {4 E2 z% H9 A5 5% G% T/ g1 s$ b+ {
0 1 0 0 0" Y7 p) A, V( @5 u; X9 l
0 1 0 1 0
8 F) O4 D3 W1 `0 j/ a) E+ n0 0 0 0 0/ |/ \  S; N. r1 a9 U
0 1 1 1 0( z2 S2 f" o2 s9 K
0 0 0 1 0
1 J+ b8 u1 t( J( O  c" F# v% H【输出样例】; B' ?( Y# C+ E7 m4 s6 M) T
! @; ~# R# n; }! v0 G3 l0 [% w
8
) q" |8 |/ V- g9 `: M6 E# | 【解题思路】( L" @( v1 R$ w

. {) \: P3 {' k2 O- @3 {        BFS的典中典。
  1. from collections import *
    1 |/ O6 P% x) _( {
  2. n,m = map(int,input().split())0 W\" _  s4 o* K: F  L9 n\" I8 E
  3. mp = [[0]*(m+5)]  A! ~: r8 [7 l7 B
  4. for i in range(n):
    2 e& {$ ]* |# b  y% n
  5.     mp.append([0]+list(map(int,input().split())))* M, Y0 s. A0 G. ?8 D% M' W  v
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]+ V\" d$ l; j8 L+ \; o  r
  7. st = [[0]*(m+5) for _ in range(n+5)]; g2 Z8 d8 {* G4 W& ~
  8. def bfs():0 n, F2 k/ H* S  d5 X  U1 Y8 W. O5 }
  9.     q = deque()
    : m* D! t\" @2 W* L) p% Q5 l. k% P
  10.     q.append([1,1,0])
    1 j1 p8 b' e0 {/ M% ^4 s' D, J
  11.     st[1][1]=1
    . `\" f9 ~) O7 s\" U- U: r# [  ?
  12.     while q:
    / `& B0 u  {2 u& r& h* D+ E
  13.         tx,ty,step = q.popleft()3 R\" l$ z) n7 c\" g8 m8 d, B5 ~
  14.         if tx==n and ty==m:
    # Z! k; T0 h, q- B+ H
  15.             print(step)7 @' x; G& w7 B( L) W+ l
  16.             return
    / t\" I, _% p5 J
  17.         for x_,y_ in dir:0 e' w2 j( ~* h' N
  18.             nx,ny = tx+x_,ty+y_
    * O7 r0 _% E9 \* A+ c2 b
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue
    % o$ o4 S: z4 Q) r' G! N7 ?
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue
    * k$ J# c/ j+ V$ x' ]7 S. |& h
  21.             q.append( [nx,ny,step+1] )+ M6 o- C2 E8 d; C\" y- Y/ x, I
  22.             st[nx][ny]=1
    ( C6 N! X. F\" h& e) b# k8 N
  23. bfs()
复制代码
4 D4 j7 o9 b! Q# e/ A! B
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-8-26 02:06 , Processed in 0.387324 second(s), 51 queries .

回顶部