DFS和BFS两种做法
import java.util.*;


public class Solution {
    /**
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    int [][]visited;
    int [][]disrs=new int[][]{{0,1},{0,-1},{1,0},{-1,0}};
    int isLandCount=0;
    public int solve (char[][] grid) {
        int n=grid.length;
        int m=grid[0].length;
        visited=new int[n][m];
       for(int i=0;i<n;i++){
           for(int j=0;j<m;j++){
               if(grid[i][j]!='0'&&visited[i][j]!=1){
                       isLandCount+=bfs(grid,i,j,0,n,m);
               }
           }
       }
        return isLandCount;
    }
    int bfs(char[][]grid,int x,int y,int curD,int n,int m){
        visited[x][y]=1;
        Queue<Integer> queue=new LinkedList<>();
        queue.add(x*m+y);
        while(!queue.isEmpty()){
            int head=queue.poll();
            int x1=head/m;
            int y1=head%m;
            for(int i=0;i<4;i++){
                int newX=x1+disrs[curD][0];
                int newY=y1+disrs[curD][1];
                if(newX<0||newX>=n||newY<0||newY>=m||visited[newX][newY]!=0||grid[newX][newY]=='0'){
                    ;
                }
                else{
                    queue.add(newX*m+newY);
                    visited[newX][newY]=1;
                }
                    curD=(curD+1)%4;
            }
            
        }
        return 1;
    }
//     int dfs(char [][]grid,int x,int y,int curD,int n,int m){
       
//         if(x<0||x>=n||y<0||y>=m){
//             return 0;
//         }
//         if(grid[x][y]=='0')
//             return 0;
//          if(visited[x][y]==1){
//             return 0;
//         }
//         visited[x][y]=1;
//         for(int i=0;i<4;i++){
//             int nextX=x+disrs[curD][0];
//             int nextY=y+disrs[curD][1];
//             dfs(grid,nextX,nextY,curD,n,m);
//             curD=(curD+1)%4;
//         }
//         return 1;
//     }
    
}