两层循环遍历整个数组,遇到陆地:先沉没这个陆地,然后DFS这个陆地四周。
int dfs(vector<vector<int>>& grid,int m,int n,int x,int y)
{
if(x<0||x>=m||y<0||y>=n||grid[x][y]==0)
return 0;
grid[x][y]=0; //沉没这个小岛
int count=1; //这里的1是上面一行被沉没的小岛
count+=dfs(grid,m,n,x,y+1);
count+=dfs(grid,m,n,x,y-1);
count+=dfs(grid,m,n,x+1,y);
count+=dfs(grid,m,n,x-1,y);
return count;
}
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
//遍历
int m=grid.size();
int n=grid[0].size();
int max=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
int ans=0;
if(grid[i][j]==1)
{
ans+=dfs(grid,m,n,i,j);
max=ans>max?ans:max;
}
}
}
return max;
}
};