var dx = []int{1, 0, -1, 0}
var dy = []int{0, 1, 0, -1}
func maxAreaOfIsland(grid [][]int) int {
n, m := len(grid), len(grid[0])
visited := make([][]bool, n)
for i := 0; i < n; i ++ {
visited[i] = make([]bool, m)
}
sum := 0
for i := 0; i < n; i ++ {
for j := 0; j < m; j ++ {
cur := 0
infect(i, j, grid, visited, &sum, &cur)
}
}
return sum
}
func infect(x, y int, grid [][]int, visited [][]bool, sum, cur *int) {
(*sum) = max((*sum), (*cur))
if x < 0 || x >= len(grid) || y < 0 || y >= len(grid[0]) || visited[x][y] == true || grid[x][y] == 0 {
return
}
*cur ++
visited[x][y] = true
for i := 0; i < 4; i ++ {
infect(x + dx[i], y + dy[i], grid, visited, sum, cur)
}
}