Problems - Set 1
Last updated
[2, 1, 4]import java.util.*;
public class PondSizes {
public static List<Integer> computePondSizes(int[][] land) {
List<Integer> pondSizes = new ArrayList<>();
int rows = land.length;
int cols = land[0].length;
boolean[][] visited = new boolean[rows][cols];
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
if (land[r][c] == 0 && !visited[r][c]) {
int size = dfs(land, visited, r, c);
pondSizes.add(size);
}
}
}
return pondSizes;
}
private static int dfs(int[][] land, boolean[][] visited, int r, int c) {
if (r < 0 || c < 0 || r >= land.length || c >= land[0].length) return 0;
if (land[r][c] != 0 || visited[r][c]) return 0;
visited[r][c] = true;
int size = 1;
// 8 directions: vertical, horizontal, diagonal
int[] dx = {-1, -1, -1, 0, 0, 1, 1, 1};
int[] dy = {-1, 0, 1, -1, 1, -1, 0, 1};
for (int d = 0; d < 8; d++) {
size += dfs(land, visited, r + dx[d], c + dy[d]);
}
return size;
}
public static void main(String[] args) {
int[][] land = {
{0, 2, 1, 0},
{0, 1, 0, 1},
{1, 1, 0, 1},
{0, 1, 0, 1}
};
List<Integer> result = computePondSizes(land);
Collections.sort(result); // optional, for ordered output
System.out.println("Pond sizes: " + result); // Expected: [1, 2, 4]
}
}