思路:如果当前节点为陆地,那么就从该节点开始,按照深度优先遍历,直到遇到0就停止。遍历过程中将1赋值为0,避免重复遍历。通过这样遍历一次,就可以找到一个岛屿了。最后的矩阵中就全部为0了。相当于求连通子图
代码:
class Solution {
public int numIslands(char[][] grid) {
int count = 0;
int row = grid.length;
if (row == 0){
return count;
}
int col = grid[0].length;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (grid[i][j] == '1'){
dfs(grid, i, j);
count ++;
}
}
}
return count;
}
public void dfs(char[][] grid,int i, int j){
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == '0'){
return;
}
grid[i][j] = '0';
dfs(grid, i - 1,j);
dfs(grid, i + 1,j);
dfs(grid, i,j - 1);
dfs(grid, i,j + 1);
}
}