题目:
题解:
- dfs
- 把200. 岛屿数量、1254. 统计封闭岛屿的数目这两个题目好好做做,你就会发现同样的套路了。
代码如下:
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
int res=0;
int m=grid.size(),n=grid[0].size();
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
if(grid[i][j]==1){
int val=0;
dfs(grid,i,j,val,m,n);
res=max(res,val);
}
}
}
return res;
}
void dfs(vector<vector<int>>& grid,int i,int j,int& val,int m,int n){
if(!grid[i][j])return;
//将已记录的岛屿1改为水0,直到图中没有相邻的岛屿时一个dfs退出,表示一块岛屿面积已经计算得出
//最后直到岛屿的1全部变为水0时,所有dfs退出,表示我们已经得到最大岛屿数了
grid[i][j]=0;
val++;
if(i-1>=0)dfs(grid,i-1,j,val,m,n);
if(i+1<m)dfs(grid,i+1,j,val,m,n);
if(j-1>=0)dfs(grid,i,j-1,val,m,n);
if(j+1<n)dfs(grid,i,j+1,val,m,n);
}
};