一、题目

【LeetCode695】岛屿的最大面积(FloodFill 算法,dfs)_重置


【LeetCode695】岛屿的最大面积(FloodFill 算法,dfs)_重置_02

二、思路

就是在leetcode200 岛屿数量​ 的基础上进行修改,加一个​​max​​​和​​cur_max​​​的比较判断和更新,特别注意无论是否更新了,最后别漏了重置​​cur_max = 0;​​。

三、代码

class Solution {
private:
vector<pair<int,int>>directions{{0,1},{0,-1},{1,0},{-1,0}};
int num;//岛屿个数
int max = 0;
int cur_max = 0;
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
int row=grid.size();//row行数
int col=grid[0].size();//column列数
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(grid[i][j] == 1){
num++;
dfs(grid,i,j);
if(max < cur_max){
max = cur_max;
}
cur_max = 0;
}
}
}
return max;//返回岛屿个数
}
void dfs(vector<vector<int>>&grid,int x,int y){
if(!isarea(grid,x,y)){
return;//如果坐标(x,y)超过网格范围,则直接返回
}
if(grid[x][y]!=1){
return;//如果不是岛屿(1)则直接返回
}
grid[x][y]=0;//将格子标记为已遍历过
cur_max++;
for(auto dir:directions){
int newx=x+dir.first,newy=y+dir.second;
if(isarea(grid,newx,newy)){//在网格范围内(正常)
dfs(grid,newx,newy);
}
}
}
bool isarea(vector<vector<int>>&grid,int x,int y){//判断点是否在网格内
if(x>=0 && x<grid.size() && 0<=y && y<grid[0].size()){
return true;
}else{
return false;
}
}
};