关键点在于判断整个岛屿否有地方与边界相连,用一个变量记录,任意位置与边界相连就是不封闭的
def closedIsland(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
def dfs(closed,x,y):
if x == 0 or x == len(grid)-1 or y == 0 or y == len(grid[0])-1:
closed = False
stack = [[x,y]]
grid[x][y] = 1
while stack:
x,y = stack.pop(0)
for nx,ny in [[x,y+1],[x,y-1],[x+1,y],[x-1,y]]:
if 0 <= nx < len(grid) and 0 <= ny < len(grid[0]) and grid[nx][ny] == 0:
grid[nx][ny] = 1
if nx == 0 or nx == len(grid)-1 or ny == 0 or ny == len(grid[0])-1:
closed = False
stack.append([nx,ny])
return closed
closed = True
res = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == 0:
if dfs(closed,i,j):
res += 1
return res