问题描述
给定一个包含了一些0和1的非空二维数组
g
r
i
d
grid
grid,一个岛屿是由四个方向(水平或垂直)的1(代表土地)构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)
示
例
:
示例:
示例:
输
入
:
输入:
输入:
[[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]]
输 出 输出 输出:5
解题报告
- 方法一:深度优先搜索
从某个坐标 ( i , j ) (i,j) (i,j)出发,从四个方向进行扩展,看能数到多少个1,即为这个连通块的岛屿面积
实现代码
class Solution{
public:
int maxAreaOfIsland(vector<vector<int>> &grid){
int ans=0;
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[0].size();j++){
if(grid[i][j]==1){
ans=max(ans, DFS(i,j,grid));
}
}
}
return ans;
}
int DFS(int i, int j, vector<vector<int>> &grid){
grid[i][j]=0;
int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};
int res=1;
for(int index=0;index<4;index++){
int ti=i+dx[index],tj=j+dy[index];
if(ti>=0&&ti<grid.size()&&tj>=0&&tj<grid[0].size()
&&grid[ti][tj]){
res+=DFS(ti, tj, grid);
}
}
return res;
}
};