问答网站建设怎么提问,网站服务器有哪些,怎样制作网站二维码,app开发自学教程「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置。
游戏地图用大小为 n * m 的网格 grid 表示,其中每个元素可以是墙、地板或者是箱子。
现在你将作为玩家参与游戏,按规则将箱子 B 移动到目标位置 T : 玩家用字符 S 表示,只要他在地板上,就可…「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置。
游戏地图用大小为 n * m 的网格 grid 表示,其中每个元素可以是墙、地板或者是箱子。
现在你将作为玩家参与游戏,按规则将箱子 'B' 移动到目标位置 'T' :
玩家用字符 'S' 表示,只要他在地板上,就可以在网格中向上、下、左、右四个方向移动。地板用字符 '.' 表示,意味着可以自由行走。墙用字符 '#' 表示,意味着障碍物,不能通行。箱子仅有一个,用字符 'B' 表示。相应地,网格上有一个目标位置 'T'。玩家需要站在箱子旁边,然后沿着箱子的方向进行移动,此时箱子会被移动到相邻的地板单元格。记作一次「推动」。玩家无法越过箱子。返回将箱子推到目标位置的最小 推动 次数,如果无法做到,请返回 -1。
示例 1: 输入:grid = [["#","#","#","#","#","#"],["#","T","#","#","#","#"],["#",".",".","B",".","#"],["#",".","#","#",".","#"],["#",".",".",".","S","#"],["#","#","#","#","#","#"]]
输出:3
解释:我们只需要返回推箱子的次数。示例 2:
输入:grid = [["#","#","#","#","#","#"],["#","T","#","#","#","#"],["#",".",".","B",".","#"],["#","#","#","#",".","#"],["#",".",".",".","S","#"],["#","#","#","#","#","#"]]
输出:-1示例 3:
输入:grid = [["#","#","#","#","#","#"],["#","T",".",".","#","#"],["#",".","#","B",".","#"],["#",".",".",".",".","#"],["#",".",".",".","S","#"],["#","#","#","#","#","#"]]
输出:5
解释:向下、向左、向左、向上再向上。示例 4:
输入:grid = [["#","#","#","#","#","#","#"],["#","S","#",".","B","T","#"],["#","#","#","#","#","#","#"]]
输出:-1提示:
1 = grid.length = 201 = grid[i].length = 20grid 仅包含字符 '.', '#', 'S' , 'T', 以及 'B'。grid 中 'S', 'B' 和 'T' 各只能出现一个。解题思路
这个问题思路非常简单,代码比较复杂。我们需要判断箱子的最小推动次数,显然通过bfs来处理。
在推箱子的过程中,包括人的移动和箱子的移