QQ登录

只需要一步,快速开始

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

python 走迷宫问题

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

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-20 11:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
题目描述】8 g5 R1 R. B) L: J8 X0 F2 F

2 P8 `4 }& X& F8 L7 v0 x& k        给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。( Q+ \9 H! M. N$ t7 t) h# j

4 \* ^+ h& s6 u3 \7 K! s% ~【输入格式】: ^; P9 ^' N! Z/ V& z: t4 _3 |. j
7 M' M5 q+ ]% `
        第一行包含两个整数 n 和 m。  @; {. w# G7 I4 w* F3 @0 a* t6 f( u

' P# Y% m" b6 e# P- Z1 F        接下来 n行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。
4 f) M, \* n5 F- K$ p$ P' P0 K. G. v' B
【输出格式】+ m$ x' d* s! E7 N9 @3 P
9 {- L/ L! F2 o9 q# T9 G5 n+ y
        输出一个整数,表示从左上角移动至右下角的最少移动次数。
/ V1 s& p. l% w/ M# d+ U4 L# c
6 Y! o6 W' |+ ?$ A) t6 f& _, z, Q【数据范围】: M$ k( u' T' K4 N! d: ^9 |  Y

% _8 d6 p1 j6 i+ b7 t        1≤n,m≤100
+ }3 H9 d0 m3 P' p% g. U- c& z6 x, F* i$ k! I1 A/ X; `
【输入样例】
: r  T$ U( }' u( M; ~% f: |2 z( x' ^
5 5" N5 S9 {. r" G8 K8 e5 o8 X
0 1 0 0 0; ~2 y3 t8 P! s
0 1 0 1 0
7 H& b: _, z( L0 j: ]; l; R& A0 0 0 0 02 E5 b9 K* W, ~; L
0 1 1 1 0
0 @( V* ^& c3 H/ }; c4 v0 0 0 1 0
! C) x; X2 C  B% Z& l* ^9 p6 M【输出样例】& @/ D6 s; F1 ]; @0 Z( t
& ?( B- g  s; A- I3 q* r# r$ P6 c
8: a* ^0 P4 ^9 x7 |) f4 h& f2 y
【解题思路】: @& [3 z! @! h4 s

. A* H. T9 `- A; C        BFS的典中典。
  1. from collections import *4 x* s9 |: `* U' S8 t\" x
  2. n,m = map(int,input().split())
    . q' H3 b. A6 Z) u/ f
  3. mp = [[0]*(m+5)]
    $ ~# n+ R2 C$ h7 C$ A7 ]( \- g' A+ l
  4. for i in range(n):
    3 h3 G- a+ @/ o. }$ w. @0 t
  5.     mp.append([0]+list(map(int,input().split())))8 H: R0 n) i$ o+ N8 c0 q. V3 }- y
  6. dir = [(1,0),(-1,0),(0,1),(0,-1)]- ]$ i# T5 z+ w5 b  i( }
  7. st = [[0]*(m+5) for _ in range(n+5)]) ]% G$ W+ `. P5 U% V
  8. def bfs():\" O: Z5 u! p( b3 |
  9.     q = deque()
    7 J' y6 s( m1 O9 G3 x( C7 P7 Y
  10.     q.append([1,1,0])9 V8 o) B2 m1 A/ i
  11.     st[1][1]=1: a$ Y4 J5 s; Q3 O, W
  12.     while q:
    , K\" ]9 t1 F& S% Y* e
  13.         tx,ty,step = q.popleft(). w4 i/ K4 j. d* p+ Z
  14.         if tx==n and ty==m:/ \; U/ Y6 O\" z& {4 D1 Y2 H$ N
  15.             print(step)
    7 s\" }( r3 F$ r- {( y  B, w
  16.             return! g* h5 T1 D3 w, K2 K5 M$ Q
  17.         for x_,y_ in dir:
    2 q6 T8 z/ i; G, ^
  18.             nx,ny = tx+x_,ty+y_
    \" E; {0 r! ]4 S  A$ ]
  19.             if nx<1 or nx>n or ny<1 or ny>m:continue
    ' t( P( @* P( l9 j
  20.             if mp[nx][ny]==1 or st[nx][ny]:continue- n2 Q+ b; C* t# R0 V* h; z) T
  21.             q.append( [nx,ny,step+1] )
    \" Q; i: `; o& p) T: P\" h2 T
  22.             st[nx][ny]=1% U5 z$ r9 O7 f. f& N4 p
  23. bfs()
复制代码
% j) e) G& ~* {8 X$ y
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 13:30 , Processed in 1.666203 second(s), 51 queries .

回顶部