pub fn island_count(grid: &[Vec<u8>]) -> usize {
let mut grid = grid.to_vec();
let rows = grid.len();
let cols = if rows > 0 { grid[0].len() } else { 0 };
fn dfs(grid: &mut Vec<Vec<u8>>, r: usize, c: usize, rows: usize, cols: usize) {
if r >= rows || c >= cols || grid[r][c] != 1 {
return;
}
grid[r][c] = 0;
if r > 0 {
dfs(grid, r - 1, c, rows, cols);
}
if c > 0 {
dfs(grid, r, c - 1, rows, cols);
}
if r + 1 < rows {
dfs(grid, r + 1, c, rows, cols);
}
if c + 1 < cols {
dfs(grid, r, c + 1, rows, cols);
}
}
let mut count = 0;
for r in 0..rows {
for c in 0..cols {
if grid[r][c] == 1 {
count += 1;
dfs(&mut grid, r, c, rows, cols);
}
}
}
count
}