给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为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
思路: 深搜DFS,整个区域的面积等于所有1的格子个数。 并且在找到一个为1的格子的时候要递归的找上下左右方向是不是有1的格子,有则继续递归下去,没有的话返回面积为0,最后相加起来就是总面积了。
class Solution {
public:
int dfs(vector<vector<int>>& grid,int& height,int& width,int y,int x){
if (!grid[y][x])
return 0;
else{
grid[y][x] = 0; // 找到为1的格子后置0,防止来回的绕圈子找。
int area = 1;
if (y-1 >= 0)
area += dfs(grid,height,width,y - 1,x);
if (y + 1 < height)
area += dfs(grid,height,width,y + 1,x);
if (x - 1 >= 0)
area += dfs(grid,height,width,y,x - 1);
if (x + 1 < width)
area += dfs(grid,height,width,y,x + 1);
return area;
}
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
int height = grid.size();
int width = grid[0].size();
int res = 0;
for (int i = 0; i < height ; ++i)
for (int j = 0; j < width ; ++j){
if (grid[i][j]){
res = max(res,dfs(grid,height,width,i,j));
}
}
return res;
}
};