URL: https://leetcode.com/problems/maximum-number-of-fish-in-a-grid/ Signed-off-by: Matej Focko <me@mfocko.xyz>
42 lines
721 B
Go
42 lines
721 B
Go
package main
|
|
|
|
func findMaxFish(grid [][]int) int {
|
|
DIRECTIONS := [][]int{
|
|
{0, 1},
|
|
{0, -1},
|
|
{1, 0},
|
|
{-1, 0},
|
|
}
|
|
|
|
width, height := len(grid[0]), len(grid)
|
|
inRange := func(y, x int) bool {
|
|
return y >= 0 && y < height && x >= 0 && x < width
|
|
}
|
|
|
|
var dfs func(int, int) int
|
|
dfs = func(y, x int) int {
|
|
if !inRange(y, x) || grid[y][x] == 0 {
|
|
return 0
|
|
}
|
|
|
|
// record found fish and reset to zero to mark as irrelevant
|
|
found := grid[y][x]
|
|
grid[y][x] = 0
|
|
|
|
for _, dir := range DIRECTIONS {
|
|
dy, dx := dir[0], dir[1]
|
|
found += dfs(y+dy, x+dx)
|
|
}
|
|
|
|
return found
|
|
}
|
|
|
|
foundMax := 0
|
|
for y, row := range grid {
|
|
for x, _ := range row {
|
|
foundMax = max(foundMax, dfs(y, x))
|
|
}
|
|
}
|
|
|
|
return foundMax
|
|
}
|