3. Given the following grid and BFS-based code snippet, what is the output (number of islands)?
char[][] grid = new char[][] {
new char[] {'1','1','0','0'},
new char[] {'1','0','0','1'},
new char[] {'0','0','1','1'},
new char[] {'0','0','0','0'}
};
int CountIslands(char[][] grid) {
int count = 0;
int rows = grid.Length;
int cols = grid[0].Length;
bool[][] visited = new bool[rows][];
for (int i = 0; i < rows; i++) visited[i] = new bool[cols];
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
if (grid[r][c] == '1' && !visited[r][c]) {
BFS(r, c, grid, visited);
count++;
}
}
}
return count;
}
void BFS(int r, int c, char[][] grid, bool[][] visited) {
int[] dr = { -1, 1, 0, 0 };
int[] dc = { 0, 0, -1, 1 };
Queue<(int, int)> queue = new Queue<(int, int)>();
queue.Enqueue((r, c));
visited[r][c] = true;
while (queue.Count > 0) {
var (row, col) = queue.Dequeue();
for (int i = 0; i < 4; i++) {
int nr = row + dr[i];
int nc = col + dc[i];
if (nr >= 0 && nr < grid.Length && nc >= 0 && nc < grid[0].Length && grid[nr][nc] == '1' && !visited[nr][nc]) {
queue.Enqueue((nr, nc));
visited[nr][nc] = true;
}
}
}
}
Console.WriteLine(CountIslands(grid));