Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static Integer max_island_size(ArrayList<ArrayList<Integer>> grid) {
- int nr = grid.size();
- int nc = grid.get(0).size();
- int[][] visited = new int[nr][nc];
- int max_size = 0;
- for (int i = 0; i < nr; i++) {
- for (int j = 0; j < nc; j++) {
- if (visited[i][j] == 0 && grid.get(i).get(j) == 1) {
- int curr_size = bfs(i, j, visited, grid);
- max_size = Math.max(max_size, curr_size);
- }
- }
- }
- return max_size;
- }
- static int bfs(int i, int j, int[][] visited, ArrayList<ArrayList<Integer>> grid) {
- int nr = grid.size();
- int nc = grid.get(0).size();
- int count = 1;
- Queue<int[]> q = new LinkedList<int[]>();
- q.offer(new int[]{i,j});
- visited[i][j] = 1;
- while (!q.isEmpty()) {
- int[] curr = q.poll();
- for (int[] neighbor : list_of_neighbors(curr[0], curr[1], grid)) {
- if (visited[neighbor[0]][neighbor[1]] == 0) {
- q.offer(neighbor);
- visited[neighbor[0]][neighbor[1]] = 1;
- count++;
- }
- }
- }
- return count;
- }
- static ArrayList<int[]> list_of_neighbors(int i, int j, ArrayList<ArrayList<Integer>> grid) {
- int nr = grid.size();
- int nc = grid.get(0).size();
- ArrayList<int[]> neighbors = new ArrayList<int[]>();
- if (i - 1 >= 0 && i - 1 <= nr - 1 && grid.get(i - 1).get(j) == 1) {
- neighbors.add(new int[]{i - 1, j});
- }
- if (i + 1 >= 0 && i + 1 <= nr - 1 && grid.get(i + 1).get(j) == 1) {
- neighbors.add(new int[]{i + 1, j});
- }
- if (j - 1 >= 0 && j - 1 <= nc - 1 && grid.get(i).get(j - 1) == 1) {
- neighbors.add(new int[]{i, j - 1});
- }
- if (j + 1 >= 0 && j + 1 <= nc - 1 && grid.get(i).get(j + 1) == 1) {
- neighbors.add(new int[]{i, j + 1});
- }
- return neighbors;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement