首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >leetcode -岛屿数目,RecursionError

leetcode -岛屿数目,RecursionError
EN

Stack Overflow用户
提问于 2022-02-01 08:13:19
回答 2查看 77关注 0票数 0

我正试图解决莱特码中著名的“岛数”问题。(链接:https://leetcode.com/problems/number-of-islands/)

我使用BFS解决了这个解决方案,但是我得到了以下错误:"RecursionError:相对地超过最大递归深度“

我为什么会犯这个错误?我不知道为什么。

这是我的代码:

代码语言:javascript
复制
def numIslands(grid):    
    islands = 0
    for i in range(0, len(grid)):
        for j in range(0, len(grid[0])):
            if(grid[i][j] == "1"):
                islands += 1
                marksZero(grid, i, j)

    print(islands)           
    return islands
                    
                    
def marksZero(grid, i, j):

    if(grid[i][j] == "0"):
        return
    
    grid[i][j] = 0
    if(i - 1 >= 0):
        marksZero(grid, i - 1, j)
    if(i + 1 < len(grid)):
        marksZero(grid, i + 1, j)
    if(j - 1 >= 0):
        marksZero(grid, i, j - 1)
    if(j + 1 < len(grid[0])):
        marksZero(grid, i, j + 1)

numIslands([["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]])
EN

回答 2

Stack Overflow用户

发布于 2022-02-01 08:20:36

您正在为网格分配int而不是字符串,因此条件会创建无限循环。改变grid[i][j] = "0"

代码语言:javascript
复制
def numIslands(grid):
    islands = 0
    for i in range(0, len(grid)):
        for j in range(0, len(grid[0])):
            if(grid[i][j] == "1"):
                islands += 1
                marksZero(grid, i, j)

    print(islands)
    return islands


def marksZero(grid, i, j):

    if(grid[i][j] == "0"):
        return

    grid[i][j] = "0"
    if(i - 1 >= 0):
        marksZero(grid, i - 1, j)
    if(i + 1 < len(grid)):
        marksZero(grid, i + 1, j)
    if(j - 1 >= 0):
        marksZero(grid, i, j - 1)
    if(j + 1 < len(grid[0])):
        marksZero(grid, i, j + 1)


numIslands([["1", "1", "1", "1", "0"],
            ["1", "1", "0", "1", "0"],
            ["1", "1", "0", "0", "0"],
            ["0", "0", "0", "0", "0"]])
票数 0
EN

Stack Overflow用户

发布于 2022-02-01 08:26:41

您需要添加一些访问矩阵,以确保只在每个单元格中访问一次。

类似这样的东西

代码语言:javascript
复制
visit = [[False ]* 5 ]* 4

def marksZero(grid, i, j):
    if visit[i][j]:
        return
    visit[i][j]=True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70937305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档