题解
代码
class Solution {
public int numIslands(char[][] grid) {
int sumisland=0;
int row=grid.length;
int col=grid[0].length;
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
//找到一个1 就说明有一个island,然后进行dfs 找到一个
if(grid[i][j]=='1'){
sumisland++;
//搜出来的是一个起点,多个分支的线
dfs(grid,i,j);
}
}
}
return sumisland;
}
// 如何dfs呢:深度搜索,直到找到一个0 或者 行列截止
void dfs(char[][]grid,int i,int j){
int row=grid.length;
int col=grid[0].length;
//深搜截止条件:行列搜索完 || 搜索到一个0
if(i<0||i>=row||j<0||j>=col||grid[i][j]=='0'){
return;
}
//搜索过的置0,以这个为起点搜索别的
grid[i][j]='0';
dfs(grid,i+1,j);
dfs(grid,i,j+1);
dfs(grid,i-1,j);
dfs(grid,i,j-1);
return ;
}
}
使用visited数组
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
//找到一个1 就说明有一个island,然后进行dfs 找到一个
if(grid[i][j]=='1'&& visited[i][j]==false){
sumisland++;
//搜出来的是一个起点,多个分支的线
dfs(grid,i,j,visited);
}
}
}