Advertisement
yimengael

Number fo Islands

Mar 7th, 2022
885
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.14 KB | None | 0 0
  1.     static Integer count_islands(ArrayList<ArrayList<Integer>> matrix) {
  2.         int nr = matrix.size();
  3.         int nc = matrix.get(0).size();
  4.        
  5.         boolean[][] visited = new boolean[nr][nc];
  6.        
  7.         int number_of_islands = 0;
  8.         for (int i = 0; i < nr; i++) {
  9.             for (int j = 0; j < nc; j++) {
  10.                 if (!visited[i][j] && matrix.get(i).get(j) == 1) {
  11.                     bfs(i, j, matrix, visited);
  12.                     number_of_islands += 1;
  13.                 }
  14.             }
  15.         }
  16.        
  17.         return number_of_islands;
  18.     }
  19.    
  20.     static void bfs(int i, int j, ArrayList<ArrayList<Integer>> matrix, boolean[][] visited) {
  21.         visited[i][j] = true;
  22.         Queue<int[]> q = new LinkedList<int[]>();
  23.         q.offer(new int[]{i,j});
  24.         while (!q.isEmpty()) {
  25.             int[] curr = q.poll();
  26.             int curr_i = curr[0];
  27.             int curr_j = curr[1];
  28.             for (int[] neighbor : getNeighbors(curr_i, curr_j, matrix)) {
  29.                 int n_i = neighbor[0];
  30.                 int n_j = neighbor[1];
  31.                 if (!visited[n_i][n_j]) {
  32.                     q.offer(new int[]{n_i, n_j});
  33.                     visited[n_i][n_j] = true;
  34.                 }
  35.             }
  36.         }
  37.     }
  38.    
  39.     static ArrayList<int[]> getNeighbors(int i, int j, ArrayList<ArrayList<Integer>> matrix) {
  40.         int nr = matrix.size();
  41.         int nc = matrix.get(0).size();
  42.        
  43.         ArrayList<int[]> neighbors = new ArrayList<int[]>();
  44.        
  45.         if (i - 1 >= 0 && i - 1 <= nr - 1 && matrix.get(i - 1).get(j) == 1) {
  46.             neighbors.add(new int[]{i - 1, j});
  47.         }
  48.        
  49.         if (i + 1 >= 0 && i + 1 <= nr - 1 && matrix.get(i + 1).get(j) == 1) {
  50.             neighbors.add(new int[]{i + 1, j});
  51.         }
  52.        
  53.         if (j - 1 >= 0 && j - 1 <= nc - 1 && matrix.get(i).get(j - 1) == 1) {
  54.             neighbors.add(new int[]{i, j - 1});
  55.         }
  56.        
  57.         if (j + 1 >= 0 && j + 1 <= nc - 1 && matrix.get(i).get(j + 1) == 1) {
  58.             neighbors.add(new int[]{i, j + 1});
  59.         }
  60.        
  61.         return neighbors;
  62.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement