import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
     int m,n;
     int[] dx = new int[]{0,0,-1,1};
     int[] dy = new int[]{-1,1,0,0};
     boolean[][] vis = new boolean[210][210];
      Queue<int[]> queue = new LinkedList<>();
     public void bfs(char[][] grid ){
             while(!queue.isEmpty()){
           int[] a = queue.poll();
           int i1 = a[0],j1 = a[1];
           if(!vis[i1][j1]){
              vis[i1][j1] = true; 
           }
           for(int k=0;k<4;k++){
            int x = a[0]+dx[k],y = a[1]+dy[k];
            if(x>=0 && x<m && y>=0 && y<n && grid[x][y] == '1' && !vis[x][y]){
                vis[x][y] = true;
                queue.offer(new int[]{x,y});
            }
           }
        }
     }

    public int solve (char[][] grid) {
        // write code here
        m = grid.length;
        n = grid[0].length;
    
        int ret=0;
       
        for(int i =0;i<m;i++){
            for(int j =0;j<n;j++){
                if(grid[i][j]=='1'&&!vis[i][j]){
                    queue.offer(new int[]{i,j});
                    bfs(grid);
                    ret++;
                }
            }
        }
        return ret;
  }
}