令(x , y , r) 代表当前站在位置x,y并且当前还剩下r个炸弹的最短步数,直接进行bfs即可。
具体细节见代码以及代码注释
在一个 N×M 的矩形区域内,特工位于标记为 B 的格子,需要前往标记为 * 的撤离点。区域内大部分格子是空地,用 . 表示,可以自由通行;部分格子有坚固的墙壁,用 # 表示,无法直接通过。特工随身携带恰好 3 枚破墙炸药,每枚炸药可以摧毁一面墙壁,使其变为可通行。特工每一步可以向上、下、左、右移动一格:若目标格为空地,直接进入,计 1 步;若目标格为墙壁,必须先消耗一枚炸药将其摧毁(使用炸药的动作也计 1 步),再进入该格。因此进入墙壁格总计消耗 2 步。请计算特工到达撤离点所需的最少步数。如果无法到达,则输出 −1。已知网格的行数、列数均不超过 20,起点和撤离点各恰有一个。
第一行包含两个整数 N 和 M,依次表示网格的行数和列数(1≤N,M≤20)。接下来 N 行,每行是一个长度为 M 的字符串,由字符 B、*、. 和 # 组成,分别表示特工初始位置、撤离点、空地和墙壁。数据保证 B 和 * 均只出现一次。
输出一个整数,表示到达撤离点所需的最少步数;若无法到达,则输出 −1。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册