微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查找最大岛屿的面积未正确返回面积

如何解决查找最大岛屿的面积未正确返回面积

我正在研究 this GeeksForGeeks 问题,该问题正在寻找 2D 网格中 1 的最大连接“岛”的面积(有问题的详细信息)。我有一个适用于某些但并非所有情况的解决方案。我的总体思路是这样的:

  1. 逐行迭代,直到找到 1。
  2. 找到 1 后,使用辅助方法查找包含 1 的岛的大小。
  3. 返回在第 1 步和第 2 步中找到的最大岛屿。

为了计算岛屿的大小,我递归地搜索每个连通元素(有 8 个),并在搜索到后将每个元素从 1 翻转为 0。

我知道以下是正确的:

  • 岛屿以正确的顺序被找到
  • 每个岛只求和一次(应该如此)
  • 一个岛内的每个 1 只被访问一次(同样,正如预期的那样)

但无论出于何种原因,尽管访问了一个岛屿内的所有 1,但这些岛屿的总和并没有正确返回。我正在寻求帮助以找出原因。我已经尝试使用打印语句等检查过程的每个步骤,但仍然无法找出问题所在。例如,在这个网格上

0 0 1 0 1 0 
0 0 0 0 0 1
0 0 0 0 1 1
0 1 0 0 0 0
0 0 0 0 0 0
0 1 1 0 0 0
0 1 0 0 0 1
1 1 1 0 0 0
1 0 1 0 0 0

我的代码返回 3,但它应该返回 8。有人能看到我的错误吗?我的代码附在下面。

class Solution:

    #Function to find unit area of the largest region of 1s.
    def findMaxArea(self,grid):
        curr_max = 0
        for i in range(0,len(grid)):
            for j in range(0,len(grid[i])):
                if grid[i][j] == 0:
                    continue
                else:
                    curr_island_size = self.helper(i,j,grid)
                    if curr_island_size > curr_max:
                        curr_max = curr_island_size
        return curr_max
    
    def helper(self,row,column,grid):
        if row == -1 or column == -1:
            return 0 # outside of grid 
        elif column >= len(grid[0]) or row >= len(grid):
            return 0 # outside of grid
        elif grid[row][column] == 0:
            return 0
        else:
            grid[row][column] = 0
            up_left = self.helper(row - 1,column - 1,grid)
            mid_left = self.helper(row,grid)
            down_left = self.helper(row + 1,grid)
            up = self.helper(row - 1,grid)
            down = self.helper(row + 1,grid)
            up_right = self.helper(row - 1,column + 1,grid)
            mid_right = self.helper(row,grid)
            down_right = self.helper(row + 1,grid) 
            return 1 + sum([up_left,mid_left,up,down,up_right,mid_right,down_right])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。