高级农民
- 积分
- 2293
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-8-24
- 最后登录
- 1970-1-1
|
又想了想之前写的不大对,BFS的step是一个地雷半径内所有的点,修改之后的代码。
- public class Bomb {
- int[][] DIRS = new int[][]{{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
- public int solution(int[][] grid, int row, int col) {
- Queue<int[]> q = new LinkedList<>();
- q.add(new int[]{row, col});
- boolean[][] visited = new boolean[grid.length][grid[0].length];
- visited[row][col] = true;
- int res = 1;
- while (!q.isEmpty()) {
- int size = q.size();
- for (int i = 0; i < size; i++) {
- int[] pos = q.remove();
- int r = pos[0];
- int c = pos[1];
- int range = grid[r][c];
- for (int j = r - range; j <= r + range; j++) {
- for (int k = c - range; k <= c + range; k++) {
- if (j < 0 || j >= grid.length || k < 0 || k >= grid[0].length || (j - r) * (j - r) + (k - c) * (k - c) > range * range || grid[j][k] == 0 || visited[j][k]) continue;
- res++;
- visited[j][k] = true;
- q.add(new int[]{j, k});
- }
- }
- }
- }
- return res;
- }
- public static void main(String[] args) {
- Bomb solution = new Bomb();
- int[][] grid = new int[][]{{1, 2, 0, 0},{0, 0, 1, 0}, {0, 2, 0, 0}, {1, 0, 0, 1}};
- System.out.println(solution.solution(grid, 0, 0));
- }
- }
复制代码
|
|