Number of Islands
LeetCode 200 · View on LeetCode
Grid DFS to count connected components of '1' cells. Each DFS sinks one island.
package main
import "fmt"
func numIslands(grid [][]byte) int {
rows, cols := len(grid), len(grid[0])
count := 0
var sink func(int, int)
sink = func(r, c int) {
if r < 0 || r >= rows || c < 0 || c >= cols || grid[r][c] != '1' {
return
}
grid[r][c] = '0'
sink(r+1, c)
sink(r-1, c)
sink(r, c+1)
sink(r, c-1)
}
for r := 0; r < rows; r++ {
for c := 0; c < cols; c++ {
if grid[r][c] == '1' {
count++
sink(r, c)
}
}
}
return count
}
func main() {
grid := [][]byte{
{'1', '1', '0', '0', '0'},
{'1', '1', '0', '0', '0'},
{'0', '0', '1', '0', '0'},
{'0', '0', '0', '1', '1'},
}
fmt.Println(numIslands(grid)) // 3
}