-
标签:
数组
深度优先搜索
-
难度:
中等
- 题目描述
- 我的解法
从 未访问过 的 岛屿结点 出发进行 深度优先搜索,访问过的岛屿结点设为 0
. 递归函数 dfs(i,j)
返回的是从岛屿结点( grid[i][j] == 1
)出发搜索到的岛屿结点数目。
import numpy as np
class Solution(object):
def maxAreaOfIsland(self, grid):
if not grid:
return 0
rows, cols = len(grid), len(grid[0])
def dfs(i, j): # 只对岛屿结点(grid[i][j]==1)进行搜索, 纪录从该节点出发搜索到的岛屿结点数
grid[i][j] = 0
num = 1
if 0<= i - 1< rows and 0 <= j < cols and grid[i-1][j]:
num += dfs(i-1, j)
if 0<= i < rows and 0 <= j + 1 < cols and grid[i][j + 1]:
num += dfs(i, j + 1)
if 0<= i + 1< rows and 0 <= j < cols and grid[i + 1][j]:
num += dfs(i + 1, j)
if 0<= i < rows and 0 <= j - 1 < cols and grid[i][j-1]:
num += dfs(i, j - 1)
return num
areas = []
for i in range(rows):
for j in range(cols):
if(grid[i][j]):
areas.append(dfs(i,j))
if not areas:
return 0
return max(areas)
- 其他解法
暂略。
网友评论