题目描述

Java代码
- DFS
思路:依次遍历网格;将坐标位置值是 ‘1’ (陆地)的当前位置及其上下左右位置“同化”为 ‘0’ 或其他字符;若当前位置时’0’则退出dfs递归
public int numIslands(char[][] grid) {
if (grid == null || grid.length == 0) return 0;
int row = grid.length;
int col = grid[0].length;
int result = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (grid[i][j] == '1') {
result++;
dfs(grid, i, j, row, col);
}
}
}
return result;
}
public void dfs(char[][] grid, int x, int y, int row, int col) {
if (x < 0 || y < 0 || x >= row || y >= col || grid[x][y] == '0') return;
grid[x][y] = '0';
dfs(grid, x + 1, y, row, col);
dfs(grid, x - 1, y, row, col);
dfs(grid, x, y + 1, row, col);
dfs(grid, x, y - 1, row, col);
}
- BFS
public int numIslands(char[][] grid) {
if (grid == null || grid.length == 0) return 0;
int row = grid.length;
int col = grid[0].length;
int result = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (grid[i][j] == '1') {
result++;
bfs(grid, i, j);
}
}
}
return result;
}
public void bfs(char[][] grid, int x, int y) {
Queue<int[]> q = new LinkedList<>();
q.add(new int[] {x, y});
while (!q.isEmpty()) {
int[] cur = q.poll();
x = cur[0];
y = cur[1];
if (0 <= x && x < grid.length && 0 <= y && y < grid[0].length && grid[x][y] == '1') {
grid[x][y] = '0';
q.add(new int[] {x - 1, y});
q.add(new int[] {x + 1, y});
q.add(new int[] {x, y - 1});
q.add(new int[] {x, y + 1});
}
}
}