classSolution{public:staticconstexprint dx[4]={0,0,1,-1};staticconstexprint dy[4]={1,-1,0,0};int res;intmaxAreaOfIsland(vector<vector<int>>& grid){int m = grid.size(), n = grid[0].size();for(int i =0; i < m; i++){for(int j =0; j < n; j++){if(i <0|| j <0|| i >= m || j >= n || grid[i][j]==0)continue;
res =max(res,dfs(grid, i, j));}}return res;}intdfs(vector<vector<int>>& grid,int x,int y){int m = grid.size(), n = grid[0].size();
grid[x][y]=0;// 该单位变为0int ans =1;for(int i =0; i <4; i++){int nx = x+dx[i], ny = y+dy[i];if(nx <0|| ny <0|| nx >= m || ny >= n || grid[nx][ny]==0)continue;
ans +=dfs(grid, nx, ny);}return ans;}};
代码(9.22 二刷自解)
classSolution{public:int ans, cur;
vector<vector<int>> dirs ={{1,0},{-1,0},{0,1},{0,-1}};intmaxAreaOfIsland(vector<vector<int>>& grid){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])continue;
cur =1;dfs(grid, i, j, m, n);
ans =max(cur, ans);}}return ans;}voiddfs(vector<vector<int>>& grid,int x,int y,int m,int n){
grid[x][y]=0;for(auto& dir : dirs){int nx = dir[0]+x, ny = dir[1]+y;if(nx <0|| ny <0|| nx >= m || ny >= n ||!grid[nx][ny])continue;
cur++;dfs(grid, nx, ny, m, n);}}};