题目:
给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0。
解答:
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
directions=[[-1,0],[1,0],[0,-1],[0,1]]
m=len(grid)
n=len(grid[0])
res=0
def InArea(r,c):
if 0<=r<m and 0<=c<n:
return True
else:
return False
#计算从(r,s)出发组成的岛屿面积
def dfs(r,c):
if not InArea(r,c):
return 0
if grid[r][c]!=1:
return 0
grid[r][c]=2
return sum([dfs(r+dr,c+dc) for dr,dc in directions])+1
for i in range(m):
for j in range(n):
if grid[i][j]==1:
tmp=dfs(i,j)
res=max(res,tmp)
return res