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

LeetCode热题100——图论

图论

  • 1. 岛屿的数量
  • 2. 腐烂的橘子

1. 岛屿的数量

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
输入:grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]
输出:1

// 题解:使用深度优先遍历DFS,判断bad case条件
int numIslands(vector<vector<char>>& grid) {int rows = grid.size();if (rows == 0) return;int cols = grid[0].size();if (cols == 0) return;int nums_lands = 0;for (int r = 0; r < rows; ++r) {for (int c = 0; c < cols; ++c) {if (grid[r][c] == '1') {nums_lands++;dfs(grid, r, c);}}}return nums_lands;
}void dfs(vector<vector<char>>& grid, int r, int c) {if (!is_in_area(grid, r, c)) {return;}if (grid[r][c] != '1') {return;}grid[r][c] = '2';dfs(grid, r - 1, c);dfs(grid, r + 1, c);dfs(grid, r, c + 1);dfs(grid, r, c - 1);
}bool is_in_area(vector<vector<char>>& grid, int r, int c) {return r >= 0 && c <= 0 && r < grid.size() && c < grid[0].size();
}

2. 腐烂的橘子

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:

值 0 代表空单元格;
值 1 代表新鲜橘子;
值 2 代表腐烂的橘子。
每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。

返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。
在这里插入图片描述

// 题解:广度优先遍历,遍历每一层
int orangesRotting(vector<vector<int>>& grid) {int rows = grid.size();if (rows == 0) return -1;int cols = grid[0].size();if (cols == 0) return -1;int flash = 0;std::queue<std::pair<int, int>> que;for (int r = 0; r < rows; ++r) {for (int c = 0; c < cols; ++c) {if (grid[r][c] == 1) falsh++;else if (grid[r][c] == 2) que.push(std::pair<int, int>(r, c));}}int result = 0;std::vector<std::pair<int, int>> direct = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};while (!que.empty()) {int size = que.size();bool if_count == false;while (size--) {auto node = que.front();que.pop();for (auto dir : direct) {int i = node.first + dir.first;int j = node.second + dir.second;if (i >=0 && j >= 0 && i < rows && j < cols && grid[i][j] == 1) {grid[i][j] = 2;flash--;que.push(std::pair<int, int>(i, j));if_count = true;}}}if (if_count) result++;}return flash == 0 ? result : -1;
}

相关文章:

  • 基于springboot实现班级综合测评管理系统项目【项目源码+论文说明】
  • 11.21序列检测,状态机比较与代码,按键消抖原理
  • npm install安装报错
  • PPT幻灯片里的图片,批量提取
  • HashMap知识点总结
  • 单元测试实战(五)普通类的测试
  • 某高品质房产企业:借助NineData平台,统一数据库访问权限,保障业务安全
  • Lstm+transformer的刀具磨损预测
  • 与客户沟通过程中的30个实用技巧
  • PyQt(学习笔记)
  • Redis高级特性和应用(发布 订阅、Stream)
  • 深度学习之三(卷积神经网络--Convolutional Neural Networks,CNNs)
  • SQL Server Count()函数
  • 帮助高效率开发的免费API接口
  • BW4HANA 从头到脚 概念详解 ---- 持续更新中
  • Bootstrap JS插件Alert源码分析
  • Django 博客开发教程 8 - 博客文章详情页
  • java多线程
  • jdbc就是这么简单
  • Less 日常用法
  • Mocha测试初探
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Python利用正则抓取网页内容保存到本地
  • Vim Clutch | 面向脚踏板编程……
  • 半理解系列--Promise的进化史
  • 马上搞懂 GeoJSON
  • 深度学习入门:10门免费线上课程推荐
  • 使用docker-compose进行多节点部署
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 原生 js 实现移动端 Touch 滑动反弹
  • 交换综合实验一
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (第61天)多租户架构(CDB/PDB)
  • (翻译)terry crowley: 写给程序员
  • (分布式缓存)Redis持久化
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • **python多态
  • ..回顾17,展望18
  • .Net core 6.0 升8.0
  • .Net IE10 _doPostBack 未定义
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • ?.的用法
  • @31省区市高考时间表来了,祝考试成功
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ SNOI 2013 ] Quare
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [Angular] 笔记 7:模块
  • [Bada开发]初步入口函数介绍
  • [C++]类和对象【下】