一个典型的矩阵搜索题,使用DFS或者BFS都可以解决。
值得注意的几点有:
- 使用辅助队列实现BFS,只有当队列中的元素满足机器人的运动条件时,才进行累加和向左、向下访问,否则跳出本次循环;
- 跳出循环的判断条件包括矩阵边界的判断、矩阵索引和目标k值之间的关系判断以及该位置是否访问过的判断;
- 队列中存放一哥四维数组的代表矩阵中的一个结点。
class Solution {
public int movingCount(int m, int n, int k) {
Queue<int[]> q = new LinkedList<>();
int[] start = {0,0,0,0};
q.offer(start);
boolean[][] visited = new boolean[m][n];
int count=0;
while(!q.isEmpty()){
int[] cur = q.poll();
if(cur[0] >=m || cur[1] >=n || cur[2] + cur[3] >k || visited[cur[0]][cur[1]])continue;
visited[cur[0]][cur[1]] = true;
count++;
q.offer(new int[] {cur[0] +1, cur[1], (cur[0] + 1) % 10 != 0 ? cur[2] + 1 : cur[2] - 8, cur[3]});
q.offer(new int[] {cur[0], cur[1]+1, cur[2], (cur[1] + 1) % 10 != 0 ? cur[3] + 1 : cur[3] - 8} );
}
return count;
}
}