两层循环遍历整个数组,遇到陆地:先沉没这个陆地,然后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;}};
