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

[力扣题解] 200. 岛屿数量

题目:200. 岛屿数量

思路

深度优先搜索、广度优先搜索、并查集;

代码

广度优先搜索

class Solution {
public:int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};queue<pair<int, int>> que;void bfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x, int y){int cur_x, cur_y, next_x, next_y;int i, j;int m = grid.size(), n = grid[0].size();while(!que.empty()){pair cur = que.front();que.pop();cur_x = cur.first;cur_y = cur.second;for(i = 0; i < 4; i++){next_x = cur_x + dir[i][0];next_y = cur_y + dir[i][1];if(next_x < 0 || next_x >= m || next_y < 0 || next_y >= n){continue;}if(!visited[next_x][next_y] && grid[next_x][next_y] == '1'){visited[next_x][next_y] = true;que.push({next_x, next_y});}}}}int numIslands(vector<vector<char>>& grid) {int m = grid.size(), n = grid[0].size();int i, j;int result = 0;vector<vector<bool>> visited (m, vector<bool>(n, false));for(i = 0; i < m; i++){for(j = 0; j < n; j++){if(!visited[i][j] && grid[i][j] == '1'){visited[i][j] = true;que.push({i, j});result++;bfs(grid, visited, i, j);}}}return result;}
};

注意此时,只要加入队列就视为已遍历;

深度优先搜索

class Solution {
private:int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};void function(vector<vector<char>>& grid, vector<vector<int>>& visited, int x, int y){int i, j;int m = grid.size(), n = grid[0].size();int next_x, next_y;// 这里递归结束条件其实可以不用写// if()for(i = 0; i < 4; i++){next_x = x + dir[i][0];next_y = y + dir[i][1];// 检查是否还在框框里if(next_x < 0 || next_x >= m || next_y < 0 || next_y >= n){continue;}if(!visited[next_x][next_y] && grid[next_x][next_y] == '1'){visited[next_x][next_y] = true;function(grid, visited, next_x, next_y);}}}public:int numIslands(vector<vector<char>>& grid) {int i, j;int result = 0;int m = grid.size(), n = grid[0].size();vector<vector<bool>> visited(m, vector<bool>(n, false));for(i = 0; i < m; i++){for(j = 0; j < n; j++){if(!visited[i][j] && grid[i][j] == '1'){visited[i][j] = true;result++;function(grid, visited, i, j);}}}return result;}
};

相关文章:

  • Java——认识Java
  • 【Vue2入门技能树】:Vue2项目从入门到放弃所遇到的问题汇总
  • 【Docker学习】深入研究命令docker exec
  • SVM兵王问题
  • 摄像头应用测试
  • 牛逼!50.3K Star!一个自动将屏幕截图转换为代码的开源工具
  • 【fastapi+mongodb】使用motor操作mongodb
  • 给页面元素添加水印
  • Tomcat调优参数
  • Linux系统如何通过编译方式安装python3.11.3
  • Java——接口
  • Vue 2与Vue 3的区别
  • java图书电子商务网站的设计与实现源码(springboot+vue+mysql)
  • vue3父组件使用ref获取子组件的属性和方法
  • java 拦截器-用户无操作超时退出利用Redis
  • 2017-09-12 前端日报
  • Apache Spark Streaming 使用实例
  • avalon2.2的VM生成过程
  • CSS实用技巧干货
  • javascript 总结(常用工具类的封装)
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS函数式编程 数组部分风格 ES6版
  • React Native移动开发实战-3-实现页面间的数据传递
  • spark本地环境的搭建到运行第一个spark程序
  • STAR法则
  • tensorflow学习笔记3——MNIST应用篇
  • 讲清楚之javascript作用域
  • 理解在java “”i=i++;”所发生的事情
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何实现 font-size 的响应式
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 突破自己的技术思维
  • 移动端解决方案学习记录
  • ‌内网穿透技术‌总结
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # linux 中使用 visudo 命令,怎么保存退出?
  • ###STL(标准模板库)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)Android开发优化---------UI优化
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (20)docke容器
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (C语言)fread与fwrite详解
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (一)WLAN定义和基本架构转
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • **PHP分步表单提交思路(分页表单提交)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Core 中插件式开发实现
  • .net mvc 获取url中controller和action
  • .net 后台导出excel ,word
  • .net 设置默认首页