cpp
复制代码
class Solution {
public:
int dir[4][2]={1,0,0,1,-1,0,0,-1};
int ans=0;
void bfs(vector<vector<bool> >&flag,int x,int y,vector<vector<int>>& grid){
queue<pair<int,int> >q;
q.push({x,y});
flag[x][y]=true;
int cnt=0;
cnt++;
while(!q.empty()){
pair<int,int>p=q.front();
q.pop();
int nx=p.first;
int ny=p.second;
for(int i=0;i<4;i++){
int xx=nx+dir[i][0];
int yy=ny+dir[i][1];
if(xx<0||yy<0||xx>=grid.size()||yy>=grid[0].size())continue;
if(flag[xx][yy]==false&&grid[xx][yy]==1){
q.push({xx,yy});
flag[xx][yy]=true;
cnt++;
}
}
}
if(cnt>ans)ans=cnt;
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
int n=grid.size();
int m=grid[0].size();
vector<vector<bool> >flag=vector<vector<bool> >(n,vector<bool>(m,false));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(grid[i][j]==1&&flag[i][j]==false){
bfs(flag,i,j,grid);
}
}
}
return ans;
}
};