【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}
};
};

浙公网安备 33010602011771号