非递归,队列方式遍历

import java.util.*;


public class Solution {
    
    //是否被遍历过
    boolean[][] isVisited;
    
    Queue<Point> queue = new ArrayDeque<Point>();
    /**
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    public int solve (char[][] grid) {
        if(grid==null||grid.length==0||grid[0].length==0){
            return 0;
        }
        //初始化
        isVisited = new boolean[grid.length][grid[0].length];
        
        int result =0;
        for(int i=0;i<grid.length;i++){
            for(int j=0;j<grid[i].length;j++){
                if(isVisited[i][j]!=true){
                    isVisited[i][j] =true;
                    if(grid[i][j]=='1'){
                        result++;
                        //遍历周围4个方向
                        visit(grid,i,j);
                        while(!queue.isEmpty()){
                            Point point=queue.poll();
                            isVisited[point.x][point.y] =true;
                            visit(grid, point.x,point.y);
                        }
                    }
                }
            }
        }
        return result;
    }
    
    public void visit(char[][] grid,int i,int j){
        if(i>0){
            if(!isVisited[i-1][j]&&grid[i-1][j]=='1'){
                queue.add(new Point((i-1),j));
                isVisited[i-1][j]=true;
            }
        }
        if(i<grid.length-1){
            if(!isVisited[i+1][j]&&grid[i+1][j]=='1'){
                queue.add(new Point((i+1),j));
                isVisited[i+1][j]=true;
            }
        }
        if(j>0){
            if(!isVisited[i][j-1]&&grid[i][j-1]=='1'){
                queue.add(new Point(i,(j-1)));
                isVisited[i][j-1]=true;
            }
        }
        if(j<grid[0].length-1){
            if(!isVisited[i][j+1]&&grid[i][j+1]=='1'){
                queue.add(new Point(i,(j+1)));
                isVisited[i][j+1]=true;
            }
        }
    }
}