给定一个大小为 n*m 的网格(n 是网格中的行数,m 是网格中的列数),由“0”(水)和“1”(土地)组成。找出岛屿的数量。
注:岛屿要么被水包围,要么被网格边界包围,由水平或垂直或对角(即所有 8 个方向)相邻陆地连接而成。
我无法找到我的以下代码的任何问题,但在 gfg 中,这没有被接受。 ` 类解决方案:
def neighbors(self,x,y,visited,grid):
n = len(grid)
m = len(grid[0])
directions = [(-1,0),(1,0),(0,1),(0,-1),(1,1),(-1,-1),(1,-1),(-1,1)]
nb = []
for cx, cy in directions:
nx,ny = x + cx, y + cy
if 0<= nx <n and 0<=ny<m and not visited[nx][ny] and grid[nx][ny] == 1:
nb.append((nx,ny))
return nb
def dfs(self,x,y,visited, grid):
nb = self.neighbors(x,y,visited,grid)
for nx, ny in nb:
if not visited[nx][ny]:
visited[nx][ny] = True
self.dfs(nx,ny,visited,grid)
def numIslands(self,grid):
n = len(grid)
m = len(grid[0])
visited = [[ False for _ in range(n)] for _ in range(m)]
count = 0
for i in range(n):
for j in range(m):
if not visited[i][j] and grid[i][j] == 1:
visited[i][j] = True
count += 1
self.dfs(i, j, visited, grid)
return count
`
请帮我解决这个问题。我不需要任何其他方法,但想知道我哪里出了问题。
我发现了我的错误。
声明:
visited = [[ False for _ in range(n)] for _ in range(m)]
不正确。最里面的列表范围应该是 m ,最外面的列表范围应该是 n 。