问题描述
给定一个包含了一些 0 和 1 的非空二维数组 grid 。
一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)
例子
解决思路:
1 遍历这个矩阵,如果碰到值为1 的位置
2 对该位置进行 上、下、左、右 四个方向进行广度遍历1的数量,遍历的同时记录 坐标位置。
3 继续遍历,碰到已经遍历过多位置则跳过。
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
if not grid:
return
use=[]
m2=0
m=len(grid)
n=len(grid[0])
def caulate(i,j):
x=1
u=[]
stack=[(i,j)]
u.append((i,j))
while stack:
t=stack.pop()
if (t[0]+1) <=m-1 and grid[t[0]+1][t[1]]==1: #上
if (t[0]+1,t[1]) not in u:
stack.append((t[0]+1,t[1]))
u.append((t[0]+1,t[1]))
x+=1
if t[0]-1>=0 and grid[t[0]-1][t[1]]==1: #下
if (t[0]-1,t[1]) not in u:
stack.append((t[0]-1,t[1]))
u.append((t[0]-1,t[1]))
x+=1
if t[1]+1<n and grid[t[0]][t[1]+1]==1:#右
if (t[0],t[1]+1) not in u:
stack.append((t[0],t[1]+1))
u.append((t[0],t[1]+1))
x+=1
if t[1]-1>=0 and grid[t[0]][t[1]-1]==1:#左
if (t[0],t[1]-1) not in u:
stack.append((t[0],t[1]-1))
u.append((t[0],t[1]-1))
x+=1
return x,u #返回面积和遍历过多位置
for i in range(m):
for j in range(n):
if grid[i][j]==1:
if (i,j) not in use:
m1,u=caulate(i,j)#计算面积
use=use+u
if m1>m2:
m2=m1
return m2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/max-area-of-island