首页 > 其他 > 详细

695. 岛屿的最大面积 DFS

时间:2020-07-05 11:38:05      阅读:41      评论:0      收藏:0      [点我收藏+]

给定一个包含了一些 0 和 1 的非空二维数组 grid 。

一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)

 

示例 1:

[[0,0,1,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,1,1,0,1,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,0,0,1,0,1,0,0],
[0,1,0,0,1,1,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,1,0,0,0,0]]
对于上面这个给定矩阵应返回 6。注意答案不应该是 11 ,因为岛屿只能包含水平或垂直的四个方向的 1 。

示例 2:

[[0,0,0,0,0,0,0,0]]
对于上面这个给定的矩阵, 返回 0。

 

注意: 给定的矩阵grid 的长度和宽度都不超过 50。


链接:https://leetcode-cn.com/problems/max-area-of-island

类似

看了题解才知道这叫沉岛思想.....

 

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        m,n=len(grid),len(grid[0])
        if m==0:return 0
        res=0
        def dfs(i,j):
            if i<0 or i>=m or j<0 or j>=n:return 0
            if grid[i][j]==0:return 0
            grid[i][j]=0
            top,bottom,left,right=dfs(i+1,j),dfs(i-1,j),dfs(i,j-1),dfs(i,j+1)
            return 1+sum([top,bottom,left,right])
        for i in range(m):
            for j in range(n):
                res=max(res,dfs(i,j))
        return res

 

 

695. 岛屿的最大面积 DFS

原文:https://www.cnblogs.com/xxxsans/p/13238197.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!