非递归,队列方式遍历
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;
}
}
}
}