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