原题链接:Leecode 695. 岛屿的最大面积
DFS
class Solution {
public:
int res=0;
void dfs(vector<vector<int>>& grid,int i,int j)
{
int m=grid.size(),n=grid[0].size();
grid[i][j]=0;
res++;
if(i && grid[i-1][j]) dfs(grid,i-1,j);
if(i+1<m && grid[i+1][j]) dfs(grid,i+1,j);
if(j && grid[i][j-1]) dfs(grid,i,j-1);
if(j+1<n && grid[i][j+1]) dfs(grid,i,j+1);
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
int ans=0;
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])
{
res=0;
dfs(grid,i,j);
ans=max(res,ans);
}
}
}
return ans;
}
};
BFS
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
int ans=0; int res=0;
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])
{
res=0;
queue<pair<int,int>> q;
q.push({i,j});
grid[i][j]=0;
res++;
while(!q.empty())
{
auto node=q.front();
q.pop();
int x=node.first,y=node.second;
if(x && grid[x-1][y])
{
q.push({x-1,y});
res++; grid[x-1][y]=0;
}
if(x+1<m && grid[x+1][y])
{
q.push({x+1,y});
res++; grid[x+1][y]=0;
}
if(y && grid[x][y-1])
{
q.push({x,y-1});
res++; grid[x][y-1]=0;
}
if(y+1<n && grid[x][y+1])
{
q.push({x,y+1});
res++; grid[x][y+1]=0;
}
}
ans=max(res,ans);
}
}
}
return ans;
}
};