
/**
岛屿: 被"0"包围的"1" 只要遇到"1"就一定至少有一个岛屿
遇到"1"后搜索与其相连的"1",所有与之相连的"1"共同组成一个岛屿
如何搜索? dfs:
从当前节点起,先向一个方向一直搜索,直到遇到0,更换方向。
如此往复,直到四个方向全部搜索过,换到下一个节点重复该流程即可。
访问过的节点重置为0,避免重复搜索。
*/
class Solution {
//记录岛屿数量
private int res;
//避免重复传参
private char[][] grid;
private int row;
private int column;
public int numIslands(char[][] grid) {
/**
岛屿: 被"0"包围的"1" 只要遇到"1"就一定至少有一个岛屿
遇到"1"后搜索与其相连的"1",所有与之相连的"1"共同组成一个岛屿
如何搜索? dfs:
从当前节点起,先向一个方向一直搜索,直到遇到0,更换方向。
如此往复,直到四个方向全部搜索过,换到下一个节点重复该流程即可。
访问过的节点重置为0,避免重复搜索。
*/
this.grid = grid;
this.row = grid.length;
this.column = grid[0].length;
//开始遍历
for(int i = 0; i < row; i++) {
for(int j = 0; j < column; j++) {
//为1,则代表遇到岛屿
if(grid[i][j] == '1') {
res++; //岛屿数量++即可
dfs(i,j);
}
}
}
return res;
}
private void dfs(int x, int y) {
if(x < 0 || x >= row || y < 0 || y >= column || grid[x][y] == '0') {
return;
}
//访问到该节点,重置为0 避免重复访问
grid[x][y] = '0';
//深搜
dfs(x - 1, y); //上
dfs(x + 1, y); //下
dfs(x, y - 1); //左
dfs(x, y + 1); //右
}
}
1454

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



