import java.util.*;
public class Solution {
//深度优先遍历为1的周围将周围置为0,这样直接遍历数组计算有1的值就是结果
public int solve (char[][] grid) {
// write code here
int l1 = grid.length;
//空矩阵
if(l1==0){
return 0;
}
int l2 = grid[0].length;
int ret = 0;
for(int i=0;i<l1;i++){
for(int j=0;j<l2;j++){
if(grid[i][j]=='1'){
//遇到有1的将周围全部置为0,这样就不用考虑有相邻1重复计算的清空
ret++;
dfs(grid,i,j);
}
}
}
return ret;
}
//遍历ij附近四个方向如果是1就置为0
public void dfs(char[][] grid ,int i,int j){
int l1 = grid.length;
int l2 = grid[0].length;
//置为0.递归的执行
grid[i][j]='0';
//遍历四个方向。如果是1就置为0
//前,注意向前遍历时i-1是>=0
if(i-1>=0 && grid[i-1][j]=='1'){
//继续递归,查看再前一个是否页为1
dfs(grid,i-1,j);
}
//后
if(i+1<l1 && grid[i+1][j]=='1'){
dfs(grid,i+1,j);
}
//左
if(j-1>=0 && grid[i][j-1]=='1'){
dfs(grid,i,j-1);
}
//右
if(j+1<l2 && grid[i][j+1]=='1'){
dfs(grid,i,j+1);
}
}
}