QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |正序浏览
|招呼Ta 关注Ta
题目描述】
9 C7 V  }' J0 n" ~( s+ Z3 U5 s
$ T; o: p5 O3 v0 T        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。
" x. ^+ o: W. t' H! q3 C0 ?  m
2 r: }" `5 `% P9 m【输入格式】; i" I8 z# G4 H" h# b) }- g$ c

) y( |( ]  f/ {$ v& k; a/ \        第一行包含两个整数 n 和 m。
3 e$ k! o$ e( X
; z- l" p, z2 ~4 r" j! l* W        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
; N3 m1 c. d% k! z& e+ P6 M) k3 A$ M5 ?# F, G7 [
【输出格式】+ u3 g0 w5 q& u- j

, L; P# Q4 Z, }# Z4 x6 G7 T2 p+ E        输出一个整数,表示从左上角移动至右下角的最少移动次数。
, Q; l$ D- {& @! B" n6 b
$ w0 Q" G  B! Y【数据范围】4 a5 C) P* C: H2 f# w: X$ i% M

  _& N+ g+ r5 b' [- Q: j/ V- Z        1≤n,m≤100
* [  ]" w3 ?; H8 a5 j8 n" H8 i
; Y5 ]0 i5 }  D5 ]% `【输入样例】
! N& e0 }2 P2 S) _: I; G. p, d1 H
% f  O) x4 a; x7 w5 5/ Y1 V8 N, |, J2 w" B2 i
0 1 0 0 0
- H: E- {  U" P+ a$ O! U: s  p* S0 1 0 1 04 P2 v4 l6 v5 v) d
0 0 0 0 0
8 I; O3 ^, F" B' Y0 1 1 1 0  A  i& Q% e/ w$ _; h
0 0 0 1 0* z( |) D, b. z6 p
【输出样例】
/ d9 q; o; }" V$ G+ [2 s
7 U. z6 ~6 @+ [- [1 w% t1 P0 O* R8
4 D" N3 `9 r9 g: y' R  ]6 q9 w 【解题思路】& m* y+ a8 z9 @; j2 y. |9 Z( f
  a" W& p% v' G# z! k' \: P
        BFS的典中典。
  1. from collections import *! W' ^. ^- g0 Q- V9 D) b
  2. n,m = map(int,input().split())0 b6 }. E3 @- }* _# \' W
  3. mp = [[0]*(m+5)]
    6 {: S& i9 M) v0 Y9 E
  4. for i in range(n):
    ' _4 P- j  @) G* M8 U# ]* X
  5.     mp.append([0]+list(map(int,input().split())))\" m! Y$ w: N9 p: _# Q( X
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]' T* O3 Q0 y% D6 j5 K( o) E
  7. st = [[0]*(m+5) for _ in range(n+5)]% I4 c! p% w% J2 G8 v9 u
  8. def bfs():! U/ S6 j- d9 V' ?3 Y
  9.     q = deque()
    \" [& G' A! H' q
  10.     q.append([1,1,0])$ ^& a/ h% \; {* l. _
  11.     st[1][1]=1
    8 ~! ~0 l  {7 u6 E
  12.     while q:
    - z/ f1 @* K# T4 y; h3 Y
  13.         tx,ty,step = q.popleft()
      U0 m+ |: P3 ]- K  H5 R
  14.         if tx==n and ty==m:2 T. M% j) `, G3 k( c\" X
  15.             print(step)% k* k- L1 D, k
  16.             return
    / M2 T& _  ~: g; W. W% ]
  17.         for x_,y_ in dir:
    # r7 _7 A# b! N8 E! e
  18.             nx,ny = tx+x_,ty+y_
    # k5 ]7 _% b8 q1 S
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue4 Z* ]0 m3 c6 N, ~
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue. M1 p' _- J+ u3 b/ U
  21.             q.append( [nx,ny,step+1] )
    ) `6 c: y* S- L' T
  22.             st[nx][ny]=15 q6 m' k: Y$ T/ j& H
  23. bfs()
复制代码

: H- s8 H% |! V. L( O; k2 i3 V
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 14:50 , Processed in 0.392055 second(s), 51 queries .

回顶部