class Solution:
temp = 0
meetEdge = False
def numEnclaves(self, A: List[List[int]]) -> int:
cnt = 0
m = len(A)
n = len(A[0])
visited = set()
def dfs(i, j):
if i < 0 or i >= m or j < 0 or j >= n or (i, j) in visited:
return
visited.add((i, j))
if A[i][j] == 1:
self.temp += 1
else:
return
if i == 0 or i == m - 1 or j == 0 or j == n - 1:
self.meetEdge = True
dfs(i + 1, j)
dfs(i - 1, j)
dfs(i, j + 1)
dfs(i, j - 1)
for i in range(m):
for j in range(n):
dfs(i, j)
if not self.meetEdge:
cnt += self.temp
self.meetEdge = False
self.temp = 0
return cnt
#
# @lc app=leetcode.cn id=1020 lang=python3
#
# [1020] 飞地的数量
#
# @lc code=start
class Solution:
def numEnclaves(self, A: List[List[int]]) -> int:
cnt = 0
m = len(A)
n = len(A[0])
def dfs(i, j):
if i < 0 or i >= m or j < 0 or j >= n or A[i][j] == 0:
return
A[i][j] = 0
dfs(i + 1, j)
dfs(i - 1, j)
dfs(i, j + 1)
dfs(i, j - 1)
for i in range(m):
dfs(i, 0)
dfs(i, n - 1)
for j in range(1, n - 1):
dfs(0, j)
dfs(m - 1, j)
for i in range(m):
for j in range(n):
if A[i][j] == 1:
cnt += 1
return cnt
# @lc code=end