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

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

public void bfs(int [][]matrix,int i,j)
{
Queue<Integer>queueRow=new LinkedList<>();
Queue<Integer>queueCol=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<matrx.length&&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);}
if(col+1<matrx[0].length&&matrix[row][col+1]==1){queueRow.add(row);queueCol.add(col+1);}
}
}
public int Bfs(int [][]matrix)
{
for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix[i].length;j++)
{
if(matrix[i][j]==1)
{
count++;

bfs(matrix,i,j);
}
}
}
return count++;

}

相关推荐

  1. 80 BFSDFS方式岛屿数量

    2023-12-30 14:58:03       61 阅读
  2. 81 使用DFSBFS机器人的运动范围

    2023-12-30 14:58:03       61 阅读
  3. leetcode热题HOT 200. 岛屿数量(深入理解DFSBFS)

    2023-12-30 14:58:03       45 阅读
  4. 蓝桥杯-岛屿个数-bfs-dfs算法

    2023-12-30 14:58:03       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-30 14:58:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-30 14:58:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-30 14:58:03       87 阅读
  4. Python语言-面向对象

    2023-12-30 14:58:03       96 阅读

热门阅读

  1. HTML5简介与基础骨架

    2023-12-30 14:58:03       62 阅读
  2. numpy数组追加元素

    2023-12-30 14:58:03       62 阅读
  3. Linux 命令 ifconfig 全面解析!

    2023-12-30 14:58:03       91 阅读
  4. git、gitee、github、gitlab 区别以及功能

    2023-12-30 14:58:03       69 阅读
  5. 一些与漏洞相关的面试题

    2023-12-30 14:58:03       48 阅读
  6. 服务器故障重启可以解决大部分问题

    2023-12-30 14:58:03       58 阅读
  7. 81 使用DFS和BFS解机器人的运动范围

    2023-12-30 14:58:03       61 阅读
  8. U-net

    2023-12-30 14:58:03       68 阅读
  9. 力扣热题100道-普通数组篇

    2023-12-30 14:58:03       50 阅读
  10. mysql5.7 数据库主从同步实现

    2023-12-30 14:58:03       56 阅读
  11. NumPy 中级教程——广播(Broadcasting)

    2023-12-30 14:58:03       59 阅读
  12. 【COMP9517】Computer Vision

    2023-12-30 14:58:03       54 阅读
  13. PyTorch训练多任务模型技巧

    2023-12-30 14:58:03       63 阅读
  14. RPC介绍

    RPC介绍

    2023-12-30 14:58:03      50 阅读
  15. 单片机通用复用组件C语言

    2023-12-30 14:58:03       52 阅读