朴实无华的深搜
class Solution {
int n;
int m;
int ans;
boolean[][] vis;
int[][] grid;
int[][] direction = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
public int numEnclaves(int[][] grid) {
n = grid.length;
m = grid[0].length;
ans = 0;
vis = new boolean[n][m];
this.grid = grid;
for(int i = 0;i < n;i++) {
for(int j = 0;j < m;j++) {
if(grid[i][j] == 1) {
if(i == 0 || j == 0 || i == n - 1 || j == m - 1) {
dfs(i, j);
}
ans++;
}
}
}
return ans;
}
void dfs(int x, int y) {
if(x < 0 || x >= n || y < 0 || y >= m || vis[x][y] == true || grid[x][y] == 0) {
return;
}
vis[x][y] = true;
ans--;
for(int[] dir : direction) {
dfs(x + dir[0], y + dir[1]);
}
}
}

该博客介绍了一种使用深度优先搜索(DFS)算法来计算二维网格中陆地区域(1s)的数量,同时排除边界上的1。算法通过遍历边界上的1开始,递归地访问相邻的1,直到所有相连的1都被访问,最终得到包围的岛屿数量。
466

被折叠的 条评论
为什么被折叠?



