class Solution {
private:
    int res=0, cur_res=0;
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param grid int整型vector<vector<>> 
     * @return int整型
     */
    int maxAreaIsland(vector<vector<int> >& grid) {
        // write code here
        int m = grid.size();
        int n = grid[0].size();
        
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(grid[i][j] == 1){
                    cur_res = 0;
                    dfs(grid, m, n, i, j);
                    res = max(res, cur_res);
                }
            }
        }
        return res;
    }
    
    void dfs(vector<vector<int> >& grid, int m, int n, 
             int x, int y){
        if(x<0 || x>=m || y<0 || y>=n){
            return;
        }
        if(grid[x][y] == 0){
            return;
        }
        cur_res += 1;
        grid[x][y] = 0;
        dfs(grid, m, n, x+1, y);
        dfs(grid, m, n, x-1, y);
        dfs(grid, m, n, x, y+1);
        dfs(grid, m, n, x, y-1);
    }
    
};