class Solution {
private int[][] dp;
private int maxcount = 0;
public int maxAreaOfIsland(int[][] grid) {
if(grid.length==0){
return 0;
}
this.dp = new int[grid.length][grid[0].length];
int rowlength = grid.length;
int columnlength = grid[0].length;
for(int i=0;i<grid.length;i+=1){
for(int k=0;k<grid[0].length;k+=1){
if(grid[i][k]==1){
this.dp[i][k] = 1;
int count = 1;
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[]{i,k});
while(queue.size()>0){
int[] pollarray = queue.poll();
int row = pollarray[0];
int column = pollarray[1];
if(row-1>=0 && grid[row-1][column]==1 && this.dp[row-1][column]==0){
this.dp[row-1][column]=1;
count +=1;
queue.add(new int[]{row-1,column});
}
if(row+1<rowlength && grid[row+1][column]==1 && this.dp[row+1][column]==0){
this.dp[row+1][column]=1;
count +=1;
queue.add(new int[]{row+1,column});
}
if(column-1>=0 && grid[row][column-1]==1 && this.dp[row][column-1]==0){
this.dp[row][column-1]=1;
count +=1;
queue.add(new int[]{row,column-1});
}
if(column+1<columnlength && grid[row][column+1]==1 && this.dp[row][column+1]==0){
this.dp[row][column+1]=1;
count +=1;
queue.add(new int[]{row,column+1});
}
}
this.maxcount = Math.max(this.maxcount,count);
}
}
}
return this.maxcount;
}
}
bfs+剪枝
不同的题适合 不同的方法,比如这道题刚开始准备用dfs,但发现不好写,于是就用bfs。