一、BFS解法
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
lenx = len(grid)
leny = len(grid[0])
def bfs(i, j):
queue = [[i,j]]
while queue:
point = queue.pop(0)
x = point[0]
y = point[1]
if 0 <= x < lenx and 0 <= y < leny and grid[x][y]:
grid[x][y] = 0
self.result += 1
queue += [[x-1,y], [x+1,y], [x,y-1], [x,y+1]]
return self.result
res = 0
for i in range(lenx):
for j in range(leny):
if grid[i][j] == 1:
self.result = 0
res = max(res, bfs(i,j))
return res
bfs:使用队(先进先出),每次pop出第一个元素,添加进入符合方向的元素。
二、DFS解法
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
lenx = len(grid)
leny = len(grid[0])
def dfs(i, j):
if not 0 <= i < lenx or not 0 <= j < leny or not grid[i][j]:
return
grid[i][j] = 0
self.result += 1
dfs(i-1,j)
dfs(i+1,j)
dfs(i,j-1)
dfs(i,j+1)
return self.result
res = 0
for i in range(lenx):
for j in range(leny):
if grid[i][j] == 1:
self.result = 0
res = max(res, dfs(i,j))
return res
按照不同的方向先将该方向走完,再回溯走另外一个方向。
总结
BFS:
DFS:
有不足之处请多多指教