查找岛屿数量 - DSA - 图表 - 想找到我的代码的问题

问题描述 投票:0回答:1

给定一个大小为 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

`

请帮我解决这个问题。我不需要任何其他方法,但想知道我哪里出了问题。

python-3.x
1个回答
0
投票

我发现了我的错误。

声明:

visited = [[ False for _ in range(n)] for _ in range(m)]

不正确。最里面的列表范围应该是 m ,最外面的列表范围应该是 n 。

© www.soinside.com 2019 - 2024. All rights reserved.