题目来源
题目描述
题目解析
这道题就是让找出被0完全包围的1的个数,反过来想,如果有1在边界上,所以只要以边界上的1为起点,遍历所有和其相连的1,并且标记,则剩下的1一定就是被0完全包围的
DFS
class Solution {
void dfs(vector<vector<int>>& grid, int x, int y){
if(x < 0 || y < 0 || x >= grid.size() || y >= grid[0].size() || grid[x][y] != 1){
return;
}
grid[x][y] = 0;
dfs(grid, x - 1, y);
dfs(grid, x + 1, y);
dfs(grid, x, y - 1);
dfs(grid, x, y + 1);
}
public:
int numEnclaves(vector<vector<int>>& grid) {
int m = grid.size();
if(m == 0){
return 0;
}
int n = grid[0].size();
for (int i = 0; i < m; ++i) {
dfs(grid, i, 0);
dfs(grid, i, n - 1);
}
for (int j = 0; j < n; ++j) {
dfs(grid, 0, j);
dfs(grid, m - 1, j);
}
int ans = 0;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if(grid[i][j] == 1){
++ans;
}
}
}
return ans;
}
};