Advertisement
SalmaYasser

Untitled

Oct 24th, 2019
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. private static final int ZOMBIE = 1;
  2. private static final int[][] DIRS = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
  3.  
  4. public int minHours(List<List<Integer>> grid) {
  5.     int people = 0;
  6.     Queue<Point> zombies = new ArrayDeque<>();
  7.     for (int r = 0; r < grid.size(); r++) {
  8.         for (int c = 0; c < grid.get(0).size(); c++) {
  9.             if (grid.get(r).get(c) == ZOMBIE) {
  10.                 zombies.add(new Point(r, c));
  11.             } else {
  12.                 people++;
  13.             }
  14.         }
  15.     }
  16.  
  17.     if (people == 0) return 0;
  18.  
  19.     for (int hours = 1; !zombies.isEmpty(); hours++) {
  20.         for (int sz = zombies.size(); sz > 0; sz--) {
  21.             Point zombie = zombies.poll();
  22.  
  23.             for (int[] dir : DIRS) {
  24.                 int r = zombie.r + dir[0];
  25.                 int c = zombie.c + dir[1];
  26.  
  27.                 if (isHuman(grid, r, c)) {
  28.                     people--;
  29.                     if (people == 0) return hours;
  30.                     grid.get(r).set(c, ZOMBIE);
  31.                     zombies.add(new Point(r, c));
  32.                 }
  33.             }
  34.         }
  35.     }
  36.     return -1;
  37. }
  38.  
  39. private boolean isHuman(List<List<Integer>> grid, int r, int c) {
  40.     return r >= 0 && r < grid.size() &&c >= 0 && c < grid.get(0).size() && grid.get(r).get(c) != ZOMBIE;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement