题目:
给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。
一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。
返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/nu… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解决:
func numEnclaves(grid [][]int) int {
m := len(grid)
n := len(grid[0])
visitd := make([][]bool, m)
for i := range visitd {
visitd[i] = make([]bool, n)
}
for i := 0; i < m; i ++ {
dfs(grid, visitd, m, n, i, 0)
dfs(grid, visitd, m, n, i, n - 1)
}
for i := 0; i < n; i ++ {
dfs(grid, visitd, m, n, 0, i)
dfs(grid, visitd, m, n, m - 1, i)
}
ans := 0
for i := 1; i < m; i ++ {
for j := 1; j < n ; j ++ {
if !visitd[i][j] && grid[i][j] == 1 {
ans ++
}
}
}
return ans
}
func dfs(grid [][]int, visitd [][]bool, m, n, i, j int) {
if i < 0 || m <= i || j < 0 || n <= j || grid[i][j] == 0 ||visitd[i][j] {
return
}
visitd[i][j] = true
dfs(grid, visitd, m, n, i - 1, j)
dfs(grid, visitd, m, n, i + 1, j)
dfs(grid, visitd, m, n, i, j - 1)
dfs(grid, visitd, m, n, i, j + 1)
}