当前位置: 首页 > news >正文

Leetcode热题100-200 岛屿数量

Leetcode热题100-200 岛屿数量

  • 1. 题目描述
  • 2. 代码实现
    • 1. dfs算法
    • 2. bfs算法

1. 题目描述

200 岛屿数量

2. 代码实现

1. dfs算法

class Solution {
public:int numIslands(vector<vector<char>>& grid) {int m = grid.size(), n = grid[0].size();int res = 0;// 注意lambda函数本身是不支持递归的,需要捕获自身来实现递归调用// 使用 lambda 表达式实现 DFSauto dfs = [&](auto&& dfs, int x, int y) -> void {// 超出边界检查if (x < 0 || x >= m || y < 0 || y >= n)return;// 不为陆地或者已访问过if (grid[x][y] != '1')return;// 设置为已访问grid[x][y] = '0';// 向四个方向递归dfs(dfs, x - 1, y); // 上dfs(dfs, x + 1, y); // 下dfs(dfs, x, y - 1); // 左dfs(dfs, x, y + 1); // 右};for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == '1') {dfs(dfs, i, j);res += 1;}}}return res;}
};

2. bfs算法

class Solution {
public:// 定义方向向量:上下左右vector<pair<int, int>> dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int numIslands(vector<vector<char>>& grid) {int m = grid.size(), n = grid[0].size();int res = 0;// 使用bfs遍历的方式来实现for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == '1') {queue<pair<int, int>> que;que.push({i, j});// 标记为已访问grid[i][j] = '0';while (!que.empty()) {auto [x, y] = que.front();que.pop();// 遍历四个方向for (const auto& [dx, dy] : dirs) {int new_x = x + dx;int new_y = y + dy;// 判断是否越界以及是否为陆地if (new_x >= 0 && new_x < m && new_y >= 0 &&new_y < n && grid[new_x][new_y] == '1') {que.push({new_x, new_y});grid[new_x][new_y] = '0';}}}res++;}}}return res;}
};
http://www.lryc.cn/news/456620.html

相关文章:

  • 大数据新视界 --大数据大厂之 GraphQL 在大数据查询中的创新应用:优化数据获取效率
  • swift使用代码结构解析
  • 五、Python基础语法(程序的输入和输出)
  • 【C语言】常见概念
  • Electron应用创建和打包
  • 代码随想录算法训练营第五六天| 99. 岛屿数量 100. 岛屿的最大面积
  • 图解 微信开发者工具 小程序源码 调试、断点标记方法 , 微信小程序调试器,真机调试断点调试方法,小程序网络API请求调试方法 总结
  • 注释,换行,控制台输入输出,命名空间,省略return语句
  • 宠物空气净化器该怎么选?希喂,小米、安德迈这三款好用吗?
  • 【Mybatis篇】Mybatis的注解开发
  • NEC协议
  • Meta 发布 Quest 3S 头显及 AR 眼镜原型:开启未来交互新视界
  • 【CSS】水平垂直居中
  • 欧盟零毁林法案 EUDR
  • 26.删除有序数组中的重复项
  • JAVA实现公众号扫码登录和关注功能实战
  • 初识Mysql/备份,基础指令
  • 没想到吧!线稿上色居然可以这么简单
  • 修改Docker的默认存储路径
  • 深入计算机语言之C++:C到C++的过度
  • HR面试篇
  • 深度探索Kali Linux的精髓与实践应用
  • 【在Linux世界中追寻伟大的One Piece】DNS与ICMP
  • 信息安全工程师(41)VPN概述
  • 算法:双指针系列(一)
  • 跟《经济学人》学英文:2024年09月28日这期 The curse of the Michelin star
  • Java Set 的介绍与实现原理
  • 我谈均值平滑模板——给均值平滑模板上升理论高度
  • WordPress添加https协议致使后台打不开解决方法
  • 如何使用pymysql和psycopg2执行SQL语句