【DFS】695. 岛屿的最大面积

就开心愉快的dfs即可~

class Solution {
public:
    int get_record(int *record, int x, int y){
        return record[x * len_y + y];
    }

    void set_record(int *record, int x, int y, int value){
        record[x * len_y + y] = value;
    }

    bool is_get(int *record, int x, int y){
        if(x >= 0 && x < len_x 
        && y >= 0 && y < len_y
        && get_record(record, x, y) == 0)
            return true;
        return false;
    }

    int dfs(vector<vector<int>>& grid, int *record, int x, int y, int step){
        set_record(record, x, y , 1);
        int sum_size = step;
        for(int i=0;i<4;++i){
            int target_x = x + dir[i][0];
            int target_y = y + dir[i][1];
            if(is_get(record, target_x, target_y) && grid[target_x][target_y])
                sum_size +=  dfs(grid, record, target_x, target_y, 1);
        }
        return sum_size;
    }

    int maxAreaOfIsland(vector<vector<int>>& grid) {
        len_x = grid.size();
        len_y = grid[0].size();
        int max_size = 0;
        int record[len_x][len_y];
        for(int i=0;i<len_x;++i)
            for(int j=0;j<len_y;++j)
                record[i][j] = 0;
        
        for(int i=0;i<len_x;++i)
            for(int j=0;j<len_y;++j)
                if(grid[i][j] == 1 && is_get((int *)record, i, j))
                    max_size = max(max_size, dfs(grid, (int *)record, i, j, 1));
        return max_size;
    }
private:
    int len_x;
    int len_y;
    int dir[4][2] = {
        {0,1},
        {0,-1},
        {-1,0},
        {1,0}
    };
};
posted @ 2022-03-01 13:54  fwx  阅读(22)  评论(0)    收藏  举报