import java.util.*;


public class Solution {
    /**
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    public int solve (char[][] grid) {
        int row_len = grid.length ;
        int col_len = grid[0].length ;
        //记录grid[i][j]是否被访问
        boolean[][] isV = new boolean[row_len][col_len] ;
        int dao_num = 0 ;//岛屿的数量
        for(int i = 0 ; i < row_len ; i ++) {
            for(int j = 0 ; j < col_len ; j ++) {
               if(grid[i][j] == '0') continue ;//如果是海洋不进行搜索
               if(!isV[i][j]) {//如果是未访问过的陆地,则认为新发现了一个岛
                   dao_num ++ ;
                   dfs(grid , i , j , isV) ;//从这个点dfs,
               } 
            }
        }
        return dao_num ;
    }
    //从当前点(未访问过的新陆地)出发,标记自己和与自己相邻的所有陆地
    public void dfs(char[][] map , int i , int j , boolean[][] isV ) {
        if(i < 0 || i >= map.length || j < 0 || j >= map[0].length || isV[i][j] || map[i][j] == '0')
            return ;
        isV[i][j] = true ;
        dfs(map , i - 1 , j , isV) ;
        dfs(map , i + 1 , j , isV) ;
        dfs(map , i , j - 1 , isV) ;
        dfs(map , i , j + 1 , isV) ;
    }
}