两层循环遍历整个数组,遇到陆地:先沉没这个陆地,然后DFS这个陆地四周。

    1. int dfs(vector<vector<int>>& grid,int m,int n,int x,int y)
    2. {
    3. if(x<0||x>=m||y<0||y>=n||grid[x][y]==0)
    4. return 0;
    5. grid[x][y]=0; //沉没这个小岛
    6. int count=1; //这里的1是上面一行被沉没的小岛
    7. count+=dfs(grid,m,n,x,y+1);
    8. count+=dfs(grid,m,n,x,y-1);
    9. count+=dfs(grid,m,n,x+1,y);
    10. count+=dfs(grid,m,n,x-1,y);
    11. return count;
    12. }
    13. class Solution {
    14. public:
    15. int maxAreaOfIsland(vector<vector<int>>& grid) {
    16. //遍历
    17. int m=grid.size();
    18. int n=grid[0].size();
    19. int max=0;
    20. for(int i=0;i<m;i++)
    21. {
    22. for(int j=0;j<n;j++)
    23. {
    24. int ans=0;
    25. if(grid[i][j]==1)
    26. {
    27. ans+=dfs(grid,m,n,i,j);
    28. max=ans>max?ans:max;
    29. }
    30. }
    31. }
    32. return max;
    33. }
    34. };