问题
解题
- 题干中的求最短距离,先想到BFS,然后用BFS+队列实现
- 又由于题干中需要维护一个花费值K,如果假设K为每个格子还能移除K个障碍物,则每个格子都可能有K个状态,用
visited[i][j][k]
表示点i,j格子还能消除k个障碍物的状态是否出现过。 - 用step维护最短路径,类似于树的层序遍历,每次扩展一层,该层的step比上一层+1.
- 如果扩展到的点为0,则剩下的消除数rest不变,否则-1,如果rest<0则跳过这个状态
- 注意:这里需要维护三个状态,横纵坐标以及该点的消除数K,因此需要自定义结构体
class Solution {
int m, n;
public int shortestPath(int[][] grid, int k) {
this.m = grid.length;
this.n = grid[0].length;
if(m <= 1 && n <= 1) return 0;
Queue<Status> queue = new LinkedList<>();
boolean[][][