- 0
- 0
- 约3.58千字
- 约 5页
- 2026-09-19 发布于河北
- 举报
面试真题:人推箱子(详细题目+手写思路+满分答案)
一、面试题目(笔试/机试原题)
给定一个二维网格地图,模拟人推箱子的移动逻辑,判断箱子能否被推到目标终点。
地图元素定义
0:空地(可以站人、箱子可以移动)
1:墙壁(障碍物,人和箱子都不能进)
2:人的起始位置
3:箱子的起始位置
4:箱子目标终点
移动规则(面试核心考点)
人可以上下左右四个方向移动,只能走到空地、终点位置,不能穿墙、不能直接穿箱子。
当人朝着箱子的方向移动时,触发推箱子逻辑:
箱子被推动的下一格必须是空地/终点,且不能是墙壁、不能再有其他箱子。
推动成功后:人移动到箱子原来的位置,箱子向前移动一格。
只要箱子任意时刻到达终点,直接返回true(通关)。
地图中只有一个人、一个箱子、一个终点。
题目要求
编写函数,传入二维网格地图,返回布尔值:箱子是否可以被推到终点。
二、面试解题思路(面试官最爱听的白话思路)
这道题不是简单的人走路BFS,是双状态BFS,很多人挂在这里:只记录人的位置,忽略了箱子位置。
核心关键点
整个游戏的状态由两个东西共同决定:人的坐标+箱子的坐标。
同一个箱子位置,人从不同方向过来,是完全不一样的可推状态,所以visited不能只记录人,要记录(人x,人y,箱x,箱y)。
拆分两种情况
普通移动:人往前走,前面没有箱子,单纯换位置,不影响箱子。
推箱子移动:人前方
原创力文档

文档评论(0)