![]()
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int count=0; //岛屿大小
int tempcount=0;
int[] dx= {0,0,1,-1};//递归 也用2个1*4 [2*5]
int[] dy= {1,-1,0,0};
int lenx=grid[0].length; //5
int leny=grid.length;
int[][] flag=new int[leny][lenx];//自动初始化全0 标记没有是否遍历
Queue<int[]> queue=new LinkedList<int[]>();
//想从1到最后1遍历 发现会有重复的欸 先不管重复了
for(int i=0;i<leny;i++) {
for(int j=0;j<lenx;j++) {
if(flag[i][j]==1) {
continue;
}
if((flag[i][j]==0)&&(grid[i][j]==1)) {//没遍历过且是岛屿
queue.offer(new int[]{i,j});
flag[i][j]=1;
tempcount++;
}
while(!queue.isEmpty()) {
int[] temp= queue.poll();//取出元素
for(int k=0;k<4;k++) {
int x=temp[0]+dx[k];
int y=temp[1]+dy[k];//其实都可以不加上左的了 不行 可能是凹形的
if((x>=0)&&(x<leny)&&(y>=0)&&(y<lenx)) {
if((flag[x][y]==0)&&(grid[x][y]==1)){
queue.offer(new int[]{x,y});
flag[x][y]=1;
tempcount++;
}
}
}
}
count=Math.max(count, tempcount);
tempcount=0;
}
}
return count;
}
}