/*
* @lc app=leetcode id=1020 lang=cpp
*
* [1020] Number of Enclaves
*/
// @lc code=start
const int dirx[] = {0, 1, 0, -1};
const int diry[] = {-1, 0, 1, 0};
class Solution {
public:
void dfs(int i, int j, vector<vector<int>>& G, vector<vector<int>>& C){
C[i][j] = 1;
if(G[i][j] == 0){
return ;
}
int x, y;
for(int k=0;k<4;k++) {
x = i + dirx[k];
y = j + diry[k];
if(x>=0 && x<G.size() && y>=0 && y<G[0].size()){
if(G[x][y] == 1 && C[x][y] == 0){
dfs(x, y, G, C);
}
}
}
}
int numEnclaves(vector<vector<int>>& grid) {
int N = grid.size();
int M = grid[0].size();
vector<vector<int>> C(N, vector<int>(M, 0));
for(int i=0;i<N;i++){
if(grid[i][0] == 1 && C[i][0] == 0){
dfs(i, 0, grid, C);
}
if(grid[i][M-1] == 1 && C[i][M-1] == 0){
dfs(i, M-1, grid, C);
}
}
for(int i=0;i<M;i++){
if(grid[0][i] == 1 && C[0][i] == 0){
dfs(0, i, grid, C);
}
if(grid[N-1][i] == 1 && C[N-1][i] == 0){
dfs(N-1, i, grid, C);
}
}
int res = 0;
for(int i=1;i<N-1;i++){
for(int j=1;j<M-1;j++){
if(grid[i][j] == 1 && C[i][j] == 0){
res ++ ;
}
}
}
return res;
}
};
// @lc code=end
No.279 - LeetCode[1020] Number of Enclaves - 经典DFS
最新推荐文章于 2024-10-06 13:05:10 发布