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
}