80 BFS和DFS两种方式解岛屿数量

问题描述:给你一个由'1'(陆地)和'0'(水)组成的二维网格,请你计算网格中岛屿的数量,请你计算岛屿的数量,岛屿总被水包围,并且每座岛屿只能由水平方向和竖直方向上相邻的陆地连接而成,并可以假设改网格的四条边均被水所包围。

dfs求解:首先外侧大循环,如果当前为陆地,则该片陆地一定是岛屿,在总岛屿的路上+1,并在dfs的过程中将遇到的1都变为0,防止下一次dfs遍历到,也为了不让外侧大循环以为他是新的大陆。

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

BFS求解,同样基于外侧循环,如果当前matrix[i][j]==1,则更新岛屿数量,否则加入queue队列中进行遍历。

public void bfs(int [][]matrix,int i,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]=1;
if(row-1>=0&&matrix[row-1][col]==1){queueRow.add(row-1);queueCol.add(col);}
if(row+1=0&&matrix[row][col-1]==1){queueRow.add(row);queueCol.add(col-1);}
if(col+1

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