题目描述
宝宝和妈妈参加亲子游戏,在一个二维矩阵(N*N)的格子地图上,宝宝和妈妈抽签决定各自的位置,地图上每个格子有不同的糖果数量,部分格子有障碍物。
游戏规则是妈妈必须在最短的时间(每个单位时间只能走一步)到达宝宝的位置,路上的所有糖果都可以拿走,不能走障碍物的格子,只能上下左右走。
请问妈妈在最短到达宝宝位置的时间内最多拿到多少糖果(优先考虑最短时间到达的情况下尽可能多拿糖果)。
输入描述
第一行输入为 N,N 表示二维矩阵的大小
之后 N 行,每行有 N 个值,表格矩阵每个位置的值,其中:
- -3:妈妈
- -2:宝宝
- -1:障碍
- ≥0:糖果数(0表示没有糖果,但是可以走)
输出描述
输出妈妈在最短到达宝宝位置的时间内最多拿到多少糖果,行末无多余空格
用例
输入
4
3 2 1 -3
1 -1 1 1
1 1 -1 2
-2 1 2 3
输出
9
说明
此地图有两条最短路径可到达宝宝位置,绿色线和黄色线都是最短路径6步,但黄色拿到的糖果更多,9个。
输入
4
3 2 1 -3
-1 -1 1 1
1 1 -1 2
-2 1 -1 3
输出
-1
说明
此地图妈妈无法到达宝宝位置
解题思路
-
初始化:
- 初始化
grid矩阵存储输入的网格数据。 - 初始化
visited三维数组来记录每个位置的最短步数和糖果数量,初始值为-1。
- 初始化
-
读取网格信息:
- 通过双层循环读取网格中的每个值。
- 如果遇到起点(值为
-3),则创建起点Node并更新visited数组中起点的步数和糖果数为0。
-
广度优先搜索(BFS):
- 将起点
Node加入队列queue。 - 初始化最大糖果数
maxCandies为0,用flag标记是否到达终点。 - 当队列不为空时,循环执行以下步骤:
- 从队列中取出一个节点
current。 - 如果当前节点是终点(值为
-2),则更新maxCandies并继续循环。 - 遍历四个可能的移动方向。
- 对于每个方向,计算新位置的坐标
- 从队列中取出一个节点
- 将起点

本文详细介绍了华为OD机试中的一道亲子游戏问题,包括问题描述、输入输出要求、解题思路及C++、Java、JavaScript、Python和C语言的实现代码。通过广度优先搜索(BFS)策略,找到妈妈在最短时间内到达宝宝位置并收集最多糖果的方案。
订阅专栏 解锁全文
2672

被折叠的 条评论
为什么被折叠?



