82 BFS和DFS两种方式求岛屿的最大面积

问题描述:给定一个包含了0和1的非空二维数组grid,一个岛屿是由一些相邻的1构成的组合,这里的相邻要求两个1必须在水平或竖直方向上相邻,你可以假设grid的四个边缘都被0,代表谁保卫者,找到给定二维数组中最大岛屿的面积,如何没有岛屿,则返回面积为0.dfs求解:外侧大循环对整个grid进行遍历,一旦grid[i][j]没有访问过(处理过程中将1变成0,从而访问过的和海水都不会访问),则进入一个dfs中遍历,并记录该遍历下满足条件的个数。进行多次梳理,直到最后得到最大的岛屿数量。
 

int count=0;
int max=Math.MIN_VALUE;

public void dfs(int [][]matrix,int i,in j)
{
if(i<0||i>=matrix.length||j<0||j>=matrix[0].length){return;}
if(matrix[i][j]==0){return;}
count++;
matrix[i][j]=0;
dfs(matrix,i+1,j);
dfs(matrix,i-1,j);
dfs(matrix,i,j-1);
dfs(matrix,i,j+1);
}
public int Dfs(int [][] matrix)
{
for(int i=0;i

BFS求解:同样外侧大循环用于遍历每一个单元。

int count=0;
int max=Math.MIN_VALUE;
public void bfs(int [][]matrix,int i,int j)
{
QueuequeueRow=new LinkedList<>();
QueuequeueCol=new LinkedList<>();
queueRow.add(i);
queueCol.add(j);
while(!queueRow.isEmpty())
{
int row=queueRow.poll();
int col=queueCol.poll();
matrix[row][col]=0;
count++;
if(row+1=0&&matrix[row-1][col]==1){queueRow.add(row-1);queueCol.add(col);}
if(col+1=0&&matrix[row][col-1]==1){queueRow.add(row);queueCol.add(col-1);}
}
}
public int Bfs(int [][]matrix)
{
for(int i=0;i

你可能感兴趣的:(JAVA刷题500道,宽度优先,深度优先,算法,数据结构,java)