首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BFS算法的时限

BFS算法的时限
EN

Stack Overflow用户
提问于 2022-08-12 13:45:45
回答 1查看 42关注 0票数 1

它是leetcode #200,岛屿的数量。我的代码是

代码语言:javascript
复制
def numIslands(self, grid: List[List[str]]) -> int:
        def bfs(i,j):
            q = deque([[i,j]])
            while q:
                r,c = q.popleft()
                if 0<=r<len(grid) and 0<=c<len(grid[0]) and grid[r][c]=="1":
                    grid[r][c]="0"
                    q += [[r + 1, c], [r - 1, c], [r, c - 1], [r, c + 1]]
        count = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j]=="1":
                    count+=1
                    bfs(i,j)

        return count

效果很好。但是当我将bfs函数转换为

代码语言:javascript
复制
def bfs(i,j):
    q = deque([[i,j]])
    while q:
        r,c = q.popleft()
        grid[r][c]="0"
        for d in [[r + 1, c], [r - 1, c], [r, c - 1], [r, c + 1]]:
            if 0<=d[0]<len(grid) and 0<=d[1]<len(grid[0]) and grid[d[0]][d[1]]=="1":
                q.append(d)

它给了我超过错误的时限,可能的原因是什么?我觉得这两种密码几乎是一样的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-12 14:28:17

你多次访问同一个州:

改为:

代码语言:javascript
复制
def bfs(i,j):
    q = deque([[i,j]])
    grid[i][j]="0"

    while q:
        r,c = q.popleft()
        for d in [[r + 1, c], [r - 1, c], [r, c - 1], [r, c + 1]]:
            if 0<=d[0]<len(grid) and 0<=d[1]<len(grid[0]) and grid[d[0]][d[1]]=="1":
                grid[d[0]][d[1]]="0"
                q.append(d)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73335161

复制
相关文章

相似问题

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