leetcode 面试题13. 机器人的运动范围【BFS】

一个典型的矩阵搜索题,使用DFS或者BFS都可以解决。
值得注意的几点有:

  1. 使用辅助队列实现BFS,只有当队列中的元素满足机器人的运动条件时,才进行累加和向左、向下访问,否则跳出本次循环;
  2. 跳出循环的判断条件包括矩阵边界的判断、矩阵索引和目标k值之间的关系判断以及该位置是否访问过的判断;
  3. 队列中存放一哥四维数组的代表矩阵中的一个结点。
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;
    }
}
发布了55 篇原创文章 · 获赞 0 · 访问量 763

猜你喜欢

转载自blog.csdn.net/er_ving/article/details/105396766
今日推荐