题目:
给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。
一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。
返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。
算法:
从所有边界开始搜索,能到达的岛屿全部置-1,最后统计grid中1的数目
func numEnclaves(grid [][]int) int {
n := len(grid)
m := len(grid[0])
dicts := [][]int{[]int{1,0},[]int{-1,0},[]int{0,1},[]int{0,-1}}
var dfs func (i, j int)
dfs = func(i, j int) {
if 0 <= i && i < n && 0 <= j && j < m && grid[i][j] == 1 {
grid[i][j] = -1
for k := range dicts {
x, y := i + dicts[k][0], j + dicts[k][1]
dfs(x, y)
}
}
}
for i := range grid {
for j := range grid[i] {
if i == 0 || j == 0 || i == n -1 || j == m - 1 {
dfs(i, j)
}
}
}
count := 0
for i := range grid {
for j := range grid[i] {
if grid[i][j] == 1 {
count ++
}
}
}
return count
}