BFS广度优先搜索问题:#P00496. 华为od机试—自动泊车

一、问题描述

在某商场的地下停车场,部署了一套智能导航系统。停车场可以看作是一个 r*c 的网格矩阵,其中:

  • 0 表示该位置是空的行车道,车辆可以通行。

  • 1 表示该位置存有障碍物、立柱或其他已停放的车辆,车辆无法通行。

停车场的入口统一设在坐标 0, 0 处。现在有一辆车进入停车场,需要前往指定的目标车位 m, n。

车辆在停车场内只能沿着上、下、左、右四个方向移动,每移动一个格子计为步数 1。请你帮车主规划一条从入口到目标车位的最短路径。

输入描述

  • 第一行输入两个整数 m 和 n,表示目标车位的行下标和列下标。

  • 第二行输入两个整数 row 和 col,表示停车场的总行数和总列数。

  • 接下来的 row 行,每行包含 col 个以空格分隔的整数(0 或 1),表示停车场的状态信息。

约束条件

  • 1 < row, col < 200

  • 0 < m < row, 0 < n < col

  • 入口 0, 0 保证为空位。

输出描述

  • 输出一个整数,表示从入口 0, 0 到目标车位 m, n 的最短路径步数。

  • 如果由于障碍物阻挡无法到达目标位置,则输出 -1。

示例 1

输入:

plaintext 复制代码
1 1
3 3
0 0 0
0 0 0
0 0 0

输出:

plaintext 复制代码
2

说明:

停车场大小为 3x3,目标位置在 1, 1。

最短路径序列可为:0, 0 -> 0, 1 -> 1, 1,共移动 2 步。

或者:0, 0 -> 1, 0 -> 1, 1,共移动 2 步。

示例 2

输入:

plaintext 复制代码
2 2
3 3
0 1 0
1 1 0
0 0 0

输出:

plaintext 复制代码
-1

说明:

由于入口 0, 0 的右边 0, 1 和下边 1, 0 均为障碍物(1),车辆被困在入口处,无法到达目标位置 2, 2,因此输出 -1。

示例 3

输入:

plaintext 复制代码
0 2
3 3
0 0 0
1 1 0
0 0 0

输出:

plaintext 复制代码
2

说明:

目标位置在 0, 2。虽然中间有障碍物,但可以沿着第一行直接向右行驶:0, 0 -> 0, 1 -> 0, 2,步数为 2。

二、解题思路

1.依次输入

2.定义上下左右四个方向:dirs = (-1,0),(1,0),(0,-1),(0,1)

3.记录是否访问过,默认未访问:vis = \[False*col for _ in range(row)]

4.定义队列元素

from collections import deque

q = deque()

q.append((起点x, 起点y, 步数0))

5.找不到路径默认值

6.进入循环寻找:内循环(在范围内未记录且可行,上下左右寻找,更新步数,加入队列数组q)

三、代码

python 复制代码
from collections import deque
m,n = map(int,input().split())
row,col = map(int,input().split())
grid = []
for _ in range(row):
    line = list(map(int,input().split()))
    grid.append(line)
# 四个移动方向
dirs = [(-1,0),(1,0),(0,-1),(0,1)]
# 记录是否访问过
vis = [[False]*col for _ in range(row)]
# 队列元素:(x坐标,y坐标,当前步数)
q = deque()
q.append((0,0,0))
vis[0][0] = True
# 找不到路径默认-1
answer = -1
while q:
    x,y,step = q.popleft()
    if x == m and y ==n:
        answer = step
        break
    for dx,dy in dirs:
        nx = x+dx
        ny = y+dy
        if 0<=nx<row and 0<=ny<col and not vis[nx][ny] and grid[nx][ny] == 0:
            vis[nx][ny] = True
            q.append((nx,ny,step+1))
print(answer)
相关推荐
hetao17338373 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6264 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan4 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356385 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah6 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO96 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician6 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.6 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
潼心1412o7 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
星光开发者7 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express