dfs专题五:FloodFill算法
1.图像渲染
link:733. 图像渲染 - 力扣(LeetCode)
code
class Solution {
public:int prev;vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {if(image[sr][sc] == color) return image;prev = image[sr][sc];dfs(image, sr, sc, color);return image;}vector<int> dx = {0, 0, -1, 1};vector<int> dy = {1, -1, 0, 0};void dfs(vector<vector<int>>& image, int row, int col, int color){printf("(%d, %d) ", row, col);image[row][col] = color;for(int i = 0; i < 4; i++){int x = row + dx[i], y = col + dy[i];if(x < 0 || x >= image.size() || y < 0 || y >= image[0].size() ||image[x][y] != prev) continue;// image代替useddfs(image, x, y, color);}}
};
2.岛屿数量
link:200. 岛屿数量 - 力扣(LeetCode)
求连通块数量
code
class Solution {
public:int ans = 0;int numIslands(vector<vector<char>>& grid) {// dfsfor(int i = 0; i < grid.size(); i++)for(int j = 0; j < grid[0].size(); j++){if(grid[i][j] == '1'){dfs(i, j, grid);// dfs把(i, j)和与其相连的1都改为0ans++;}}return ans;}vector<int> dx = {0, 0, 1, -1};vector<int> dy = {1, -1, 0, 0};void dfs(int row, int col, vector<vector<char>>& grid){grid[row][col] = '0';for(int i = 0; i < 4; i++){int x = row + dx[i], y = col + dy[i];if(x < 0 || x >= grid.size() || y < 0 || y >= grid[0].size() || grid[x][y] != '1') continue;dfs(x, y, grid);}}
};
3.岛屿的最大面积
link:695. 岛屿的最大面积 - 力扣(LeetCode)
code
class Solution {
public:int ans = 0;int path = 0;// 当前面积int maxAreaOfIsland(vector<vector<int>>& grid) {// dfsfor(int i = 0; i < grid.size(); i++)for(int j = 0; j < grid[0].size(); j++){if(grid[i][j] == 1){path = 0;dfs(i, j, grid);// dfs求出(i, j)连通图面积并置为0, 同时更新ans// grid代替used}}return ans;}vector<int> dx = {0, 0, -1, 1};vector<int> dy = {1, -1, 0, 0};void dfs(int row, int col, vector<vector<int>>& grid){printf("(%d, %d) path:%d, ans:%d\n", row, col, path, ans);grid[row][col] = 0;path++;ans = max(ans, path);// 不用非要最后更新ansfor(int i = 0; i < 4; i++){int x = row + dx[i], y = col + dy[i];if(x < 0 || x >= grid.size() || y < 0 || y >= grid[0].size()|| grid[x][y] != 1) continue;// 剪枝dfs(x, y, grid);}}
};
4.被围绕的区域
link:130. 被围绕的区域 - 力扣(LeetCode)
或者正难则反, 先把和边界相邻的连通图消灭,之后就可以不用判读地/正常地消灭剩下合法连通图了
code
class Solution {
public:bool used[205][205];vector<pair<int, int>> tmp;// tmp代替used记录本次连通图元素, 省去每次遍历和clear usedbool flag = true;// 此连通图是否合法(没有挨着边界)void solve(vector<vector<char>>& board) {memset(used, false, sizeof used);for(int i = 0; i < board.size(); i++)for(int j = 0; j < board[0].size(); j++){if(board[i][j] == 'O' && !used[i][j]){flag = true;tmp.clear();dfs(i, j, board);// 如果(i,j)合法,dfs会修改boardif(flag){for(auto[x, y]:tmp){board[x][y] = 'X';}}}}}vector<int> dx = {0, 0, 1, -1};vector<int> dy = {1, -1, 0, 0};void dfs(int row, int col, vector<vector<char>>& board){used[row][col] = true;// dfs内标记/处理used等tmp.push_back({row, col});for(int i = 0; i < 4; i++){int x = row + dx[i], y = col + dy[i];if(x < 0 || x >= board.size() || y < 0 || y >= board[0].size()) {flag = false;continue;}if(used[x][y] || board[x][y] == 'X') continue;// 剪枝dfs(x, y, board);}// used[row][col] = false; // dfs内回溯}
};
5.太平洋大西洋水流问题
link:417. 太平洋大西洋水流问题 - 力扣(LeetCode)
tips:正难则反 , 从大洋反向灌溉即可。 避免了重复计算,大大降低了时间复杂度
code
class Solution {
public:vector<vector<bool>> pacific;vector<vector<bool>> atlantic;vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {pacific = vector<vector<bool>>(heights.size(), vector<bool>(heights[0].size(), false));atlantic = pacific;// pacificprintf("1:\n");for(int i = 0; i < heights.size(); i++){dfs(i, 0, heights, pacific);// 函数内标记}printf("2:\n");for(int i = 1; i < heights[0].size(); i++){dfs(0, i, heights, pacific);}// atlanticfor(int i = 0; i < atlantic.size(); i++){dfs(i, heights[0].size()-1, heights, atlantic);}for(int i = 0; i < atlantic[0].size(); i++){dfs(heights.size()-1, i, heights, atlantic);}// 寻找交点vector<vector<int>> ans;for(int i = 0; i < heights.size(); i++)for(int j = 0; j < heights[0].size(); j++){if(pacific[i][j] && atlantic[i][j]){ans.push_back({i, j});}}return ans;}vector<int> dx = {0, 0, 1, -1};vector<int> dy = {1, -1, 0, 0};void dfs(int row, int col, vector<vector<int>>& heights, vector<vector<bool>>& used){if(row < 0 || row >= heights.size() || col < 0 || col >= heights[0].size() || used[row][col]) return;used[row][col] = true;// 函数内标记, 且不回溯for(int i = 0; i < 4; i++){int x = row + dx[i], y = col + dy[i];if(x < 0 || x >= heights.size() || y < 0 || y >= heights[0].size()|| used[x][y] || heights[row][col] > heights[x][y]) continue;dfs(x, y, heights, used);}}
};
6.扫雷
link:529. 扫雷游戏 - 力扣(LeetCode)
code
class Solution {
public:vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) {if(board[click[0]][click[1]] == 'M') {board[click[0]][click[1]] = 'X';return board;}dfs(click[0], click[1], board);// 递归展开return board;}void dfs(int row, int col, vector<vector<char>>& board){if(row < 0 || row >= board.size() || col < 0 || col >= board[0].size() || board[row][col] != 'E') return;int cnt = 0;// 相邻雷的数量for(int i = -1; i <= 1; i++)for(int j = -1; j <= 1; j++){int x = row + i, y = col + j;if((i == 0 && j == 0) || x < 0 || x >= board.size() || y < 0 || y >= board[0].size()) continue;if(board[x][y] == 'M')cnt++;}if(cnt) {board[row][col] = cnt + '0';return;}else{board[row][col] = 'B';}// 周围没有雷for(int i = -1; i <= 1; i++)for(int j = -1; j <= 1; j++){if(i == 0 && j == 0) continue;int x = row + i, y = col + j;dfs(x, y, board);}}
};
相关文章:
dfs专题五:FloodFill算法
1.图像渲染 link:733. 图像渲染 - 力扣(LeetCode) code class Solution { public:int prev;vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {if(image[sr][sc] color) return …...
笔试-二维数组
应用 快递业务有N个站点,1<N<10000;站点0、站点1可达,记作0-1;如果0-1、1-2,则站点0、站点2可达,记作0-2;s[i][j]1表示i-j可达,反之s[i][j]0表示i-j不可达;s[i][j…...
大模型GUI系列论文阅读 DAY2续:《一个具备规划、长上下文理解和程序合成能力的真实世界Web代理》
摘要 预训练的大语言模型(LLMs)近年来在自主网页自动化方面实现了更好的泛化能力和样本效率。然而,在真实世界的网站上,其性能仍然受到以下问题的影响:(1) 开放领域的复杂性,(2) 有限的上下文长度ÿ…...
如何提升IP地址查询数据服务的安全?
随着网络科技深入人们的生活之中,数据相关服务顺时代浪潮应运而生。而在数据查询相关服务之中,数据安全乃是重中之重。而如何部署数据查询服务安全,今天让我们来大致了解一下: 数据加密 数据加密是数据查询服务安全的核心技术之…...
【Leetcode】--- 接雨水
题目传送门 方法一: 前缀和后缀和 算法原理 需要两个数组。 第一个数组存储最左边到第 i 个位置的最大高度(前缀最大值) 第二个数组存储最右边到第 i 个位置的最大高度(后缀最大值) 最终第 i 个位置的 接水量 min&am…...
深入探索Math.NET:开启高效数值计算之旅
一、引言 在当今数字化时代,数值计算已然成为科学研究、工程设计、金融分析等众多领域的核心驱动力。从探索宇宙奥秘的物理学计算,到优化建筑结构的土木工程设计,再到预测市场趋势的金融建模,数值计算的身影无处不在,…...
案例研究丨浪潮云洲通过DataEase推进多维度数据可视化建设
浪潮云洲工业互联网有限公司(以下简称为“浪潮云洲”)成立于2018年,定位于工业数字基础设施建设商、具有国际影响力的工业互联网平台运营商、生产性互联网头部服务商。截至目前,浪潮云洲工业互联网平台连续五年入选跨行业跨领域工…...
Logback日志文件详细配置
完整版Logback.xml文件 放在Resources目录下即可 Mac用户更改一下日志文件存放地点即可 <FileNamePattern>/Users/***/***/tlias-%d{yyyy-MM-dd}-%i.log</FileNamePattern> <?xml version"1.0" encoding"UTF-8"?> <configurati…...
TDengine 与上海电气工业互联网平台完成兼容性认证
在工业数字化转型和智能化升级的浪潮中,企业对高效、可靠的数据管理解决方案的需求日益增长。特别是在风电智能运维、火电远程运维、机床售后服务等复杂多样的工业场景下,如何实现海量设备和时序数据的高效管理,已经成为推动行业升级的关键。…...
VMware虚拟机安装macOS11
1.安装虚拟机 如果尚未安装虚拟机,请先进行安装。地址:VMware17下载地址 2、下载苹果镜像文件 macOS Big Sur 11.0.1 (20B29) 3、下载unlock文件(目的是开启VMware的macOS选项功能) https://download.csdn.net/d…...
PostgreSQL中级专家是什么意思?
数据库技术领域,PostgreSQL 作为一种广泛使用的开源关系型数据库管理系统,吸引了众多技术人员深入学习和研究。“PostgreSQL 中级专家” 是对掌握该数据库特定技能层次的一种描述。 知识储备 中级专家深入理解 PostgreSQL 的体系结构,包括进程…...
ubuntu20使用apt安装mysql8
目录 ubuntu20使用apt安装mysql8报错列表参考链接首先删除旧mysql 一、下载配置mysql8库索引下载apt包解压包配置更新apt库索引 二、下载安装mysql8三、启动mysql服务配置开机自启动,忽略 本地登录远程登录查看mysql的所有用户使用客户端远程登陆如果报错完成 参考链…...
FastDFS的安装及使用
分布式存储发展历程 前段时间 618 活动火热进行,正是购物的好时机。当我们访问这些电 商网站的时候,每一个商品都会有各式各样的图片展示介绍,这些图 片一张两张可以随便丢在服务器的某个文件夹中,可是电商网站如此 大体量的…...
二叉树(了解)c++
二叉树是一种特殊的树型结构,它的特点是: 每个结点至多只有2棵子树(即二叉树中不存在度大于2的结点) 并且二叉树的子树有左右之分,其次序不能任意颠倒,因此是一颗有序树 以A结点为例,左边的B是它的左孩子,右边的C是…...
头像生成小程序搭建(免费分享)
如下图为小程序页面的基本效果,下面将介绍该小程序的功能 页面template代码如下: <template><view class"avatar-containner"><block v-if"!showCropper"><image class"pageback" src"../../s…...
Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案
作者:Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商, 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点,能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…...
【ComfyUI专栏】ComfyUI 部署Kolors
什么是Kolors?我相信一定会有朋友可能第一次听说这个生图的模型,开始我也很难想象,这竟然是快手推出的可灵AI的项目,我们可以直接利用模型来生成图片和视频。 大家可以通过直接访问可灵AI的网址获取到可灵的项目,但是对于我们来说我们需要基于ComfyUI来生成必要的图片和视…...
HBase的原理
一、什么是HBase HBase是一个分布式,版本化,面向列的数据库,依赖Hadoop和Zookeeper (1)HBase的优点 提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统 (2) HBase 表的特性 Region包含多行 列族包含多…...
Spring Boot中如何实现异步处理
在 Spring Boot 中实现异步处理可以通过使用 Async 注解和 EnableAsync 注解来实现。以下是如何配置和使用异步处理的步骤和示例代码。 步骤: 启用异步支持: 在 Spring Boot 配置类上使用 EnableAsync 注解启用异步处理。使用 Async 注解异步方法&…...
SSM电子商城系统
🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 电…...
新版IDEA创建数据库表
这是老版本的IDEA创建数据库表,下面可以自己勾选Not null(非空),Auto inc(自增长),Unique(唯一标识)和Primary key(主键) 这是新版的IDEA创建数据库表,Not null和Auto inc可以看得到,但Unique和Primary key…...
二叉树的存储(下)c++
链式存储 我们可以创建两个数组L[N]、r[N],分别存储i 号结点的左右孩子的编号,这样就可以通过数组下标实现链式访问。 本质上还是孩子表示法,存储的是左右孩子的信息 #include <iostream>using namespace std;const int N 1e6 10; …...
Flutter中PlatformView在鸿蒙中的使用
Flutter中PlatformView在鸿蒙中的使用 概述在Flutter中的处理鸿蒙端创建内嵌的鸿蒙视图创建PlatformView创建PlatformViewFactory创建plugin,注册platformview注册插件 概述 集成平台视图(后称为平台视图)允许将原生视图嵌入到 Flutter 应用…...
Docker—搭建Harbor和阿里云私有仓库
Harbor概述 Harbor是一个开源的企业级Docker Registry管理项目,由VMware公司开发。它的主要用途是帮助用户迅速搭建一个企业级的Docker Registry服务,提供比Docker官方公共镜像仓库更为丰富和安全的功能,特别适合企业环境使用。12 Harb…...
一篇博文了解JVM的各个内存区域
JVM的内存区域可以细分为程序计数器、虚拟机栈、本地方法栈、堆和方法区 其中,方法区和堆是线程共享的,虚拟机栈、本地方法栈和程序计数器是私有的; 先来说说程序计数器,它也被称为PC寄存器,占据着很小的内存空间…...
无监督学习:聚类、异常检测
聚类 工作原因我对聚类特别熟悉,因此视频课程基本快进看完,不做记录 异常检测 高斯(正态)分布 多特征异常检测 将每个特征作为独立特征(实践证明即使不完全独立也影响不大)计算高斯分布的参数,然后将待预估样本代入…...
pdf与ofd的区别详细对比
PDF(Portable Document Format)和OFD(Open Fixed-layout Document)是两种常见的电子文档格式,它们在设计理念、技术实现、应用场景等方面存在显著差异。以下是对这两种格式的详细对比分析,涵盖其历史背景、…...
DDD架构实战第六讲总结:领域驱动设计中的聚合
云架构师系列课程之DDD架构实战第六讲总结:领域驱动设计中的聚合 聚合提升了对象系统的粒度,保证了业务逻辑的完整性,减少了错误产生的概率 一、引言 本讲将探讨领域驱动设计(DDD)中的重要概念——聚合。聚合是业务完整性的单元,是一个更大力度的封装。在领域驱动设计中…...
CentOS7使用源码安装PHP8教程整理
CentOS7使用源码安装PHP8教程整理 下载安装包解压下载的php tar源码包安装所需的一些依赖扩展库安装前的配置修改配置文件1、进入php8的安装包 配置环境变量开机自启启动服务创建软连接常见问题1、checking for icu-uc > 50.1 icu-io icu-i18n... no2、configure: error: Pa…...
vue3中自定一个组件并且能够用v-model对自定义组件进行数据的双向绑定
1. 基础用法 在 Vue3 中,v-model 在组件上的使用有了更灵活的方式。默认情况下,v-model 使用 modelValue 作为 prop,update:modelValue 作为事件。 1.1 基本示例 <!-- CustomInput.vue --> <template><input:value"mo…...
【win11】解决msrdc.exe窗口启动导致周期性失去焦点
msrdc.exe randomly stealing focus 最近写代码时,经常出现周期性失去焦点的情况非常恼人,不确定是否是Q4的微软更新引起?换了输入法也不行,只能借助工具来查看:大神的工具非常好: 可以发现是remote app 启动了一个UI…...
【2024年终总结】深圳工作生活评测
距离上次写年终总结已经过了一年半了,这一年半中哪怕经历了很多的事情,但是感觉又没发生什么。想写一些骚话,却总觉得自己无法完全表达,便也就这样,静静地记录下这一段时光。 现在是2025年,春节前的时光&am…...
【29】Word:李楠-学术期刊❗
目录 题目 NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片,对应位置填入对应文字 (手动调整即可)复制样式:开始→样式对话框→管理…...
npm常用命令
以往nodejs版本 Node.js — Node.js 版本 CNPM Binaries Mirror 查看当前版本 npm -v 查看node安装在哪里 where node 清除缓存 npm cache clean --force 淘宝镜像(只支持下载,不支持上传发布) npm config set registry https://reg…...
安装最小化的CentOS7后,执行yum命令报错Could not resolve host mirrorlist.centos.org; 未知的错误
文章目录 安装最小化的CentOS7后,执行yum命令报错"Could not resolve host: mirrorlist.centos.org; 未知的错误"错误解决方案: 安装最小化的CentOS7后,执行yum命令报错"Could not resolve host: mirrorlist.centos.org; 未知…...
现代 JavaScript 的入门教程
现代 JavaScript 的定义 现代 JavaScript 通常指的是自 ECMAScript 2015(也称为 ES6)以来的一系列语言更新和改进,以及随之而来的开发工具、库和框架的生态系统。这些变化不仅增强了 JavaScript 的功能性和表达能力,还推动了更高…...
linux naive代理设置
naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...
Java数据结构 (链表反转(LinkedList----Leetcode206))
1. 链表的当前结构 每个方框代表一个节点,每个节点包含两个部分: 左侧的数字:节点存储的值,例如 45、34 等。右侧的地址(如 0x90):表示该节点 next 指针指向的下一个节点的内存地址。 例子中&a…...
游戏与硬件深度协同,打造更精细的体验优化
高画质的游戏往往带来手机的发热和卡顿从而影响游戏体验。开发者希望能够获取到手机运行的实时状态,从而能够进行主动的负载调节,将手机发热时游戏体验影响降到最低;同时手机也可以通过游戏传入的关键场景如"正在下载资源"“团战中…...
C++实现设计模式---命令模式 (Command)
命令模式 (Command) 命令模式 是一种行为型设计模式,它将请求封装为一个对象,从而使得可以用不同的请求对客户端进行参数化、对请求排队或记录日志,以及支持可撤销的操作。 意图 将操作的调用者与接收者分离,通过将请求封装为独…...
office 2019 关闭word窗口后卡死未响应
最近关闭word文件总是出现卡死未响应的状态,必须从任务管理器才能杀掉word 进程,然后重新打开word再保存,很是麻烦。(#其他特征,在word中打字会特别变慢,敲击键盘半秒才出现字符。) office官网…...
flutter入门系列教程<三>:tabbar的高度自适用,支持无限滚动
背景 在之前的文章中,简介了tabbar组件的使用,它通常用于顶部放置tabbar标签页头,内容全部都是TabbarView的全部内容,且内容通常是占满屏幕的(尽可能大),如下: 但是有时候我们需要…...
前端三件套详解之 HTML
HTML: 师承b站pink老师【黑马程序员pink老师前端入门教程,零基础必看的h5(html5)css3移动端前端视频教程】 HTML概述 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创…...
【pytorch 】miniconda python3.11 环境安装pytorch
ubuntu24.04 miniconda python3.11 环境安装pytorch 组件:langgraph本身不需要有一些模型是需要的:python3.11环境:报错ModuleNotFoundError: No module named ‘torchaudio’ ModuleNotFoundError: No module named ‘torchaudio’File "/root/miniconda3/envs/05_ep_…...
支持大功率输出高速频闪的图像处理用光源控制器
机器视觉系统中的光源控制器在确保图像质量、提高系统稳定性、降低能耗以及方便系统扩展和升级等方面发挥着重要作用。它可提供稳定光源,调节参数,另外具有操作便捷性。 下面我们来看Gardasoft的光源控制器,Gardasoft拥有作为图像处理用LED光…...
使用 Python 和 Tesseract 实现验证码识别
验证码识别是一个常见且实用的技术需求,尤其是在自动化测试和数据采集场景中。通过开源 OCR(Optical Character Recognition,光学字符识别)工具 Tesseract,结合 Python 的强大生态,我们可以高效实现验证码识…...
Opencv学习
Long time no see!哈哈,假期终于有时间做一点自己喜欢的东西了 还是想说,每天花一点时间投在自己喜欢的事情上,或者专攻一些平时不学的方向,真的很酷! 图片绘制 对于图像绘制,可以分为:图像创…...
数学大模型MAmmoTH:通过混合说明调整建立数学通才模型
向悦和陈文虎是该项目的主要作者。他们这个项目推出 MAmmoTH,这是一系列专为解决一般数学问题而定制的开源大型语言模型 (LLM)。 MAmmoTH 模型在 MathInstruct 上进行训练,MathInstruct 是我们精心策划的指令调整数据集。 MathInstruct 已编译 来自 13 个…...
springboot 配置多数据源以及动态切换数据源
场景 我们springboot项目,通常会有多个数据库,例如mysql,vertica,postgresql等等数据库,通常我们需要动态切换使用我们想要的数据库,这时候就需要配置多数据源了 多数据源特性 支持多数据库类型:例如,同…...
计算机图形学:实验三 光照与阴影
一、程序功能设计 设置了一个3D渲染场景,支持通过键盘和鼠标控制交互,能够动态调整光源位置、物体材质参数等,具有光照、阴影和材质效果的场景渲染。 OpenGL物体渲染和设置 创建3D物体:代码中通过 openGLObject 结构体表示一个…...