搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Guff_9hys
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
序列化框架 kryo VS hessian VS Protostuff VS java
2
Inception网络模块(Inception Network Module)_inception convolut ion module
3
Gitlab修改文件上传10M大小限制(非命令行方式)
4
修改mysql数据库密码_navicatemysql改数据库密码
5
ThreadLoad如何防止内存溢出
6
从零开始学习 Git 之 Git 的历史_创建git历史
7
zookeeper未授权访问漏洞修复_zk未授权访问
8
链表基础1——无头结点单向非循环链表的基本操作(c语言实现)_无头节点单向链表
9
线程的创建(线程池)_线程池创建线程
10
JSON.toJSONString_java json.tojsonstring
当前位置:
article
> 正文
递归、搜索与回溯算法:FloodFill 算法_floodfile算法、记忆化搜索
作者:Guff_9hys | 2024-08-19 17:19:44
赞
踩
floodfile算法、记忆化搜索
例题一
算法思路:
可以利⽤「深搜」或者「宽搜」,遍历到与该点相连的所有「像素相同的点」,然后将其修改成指定的像素即可。
全局变量:
int dx[4] = { 0,0,1,-1 }, dy[4] = { 1,-1,0,0 };
int m, n;
int precolor;//记录原先的颜色
递归函数设计:void dfs(vector<vector<int>>& image,int i,int j,int color)
•
参数:
a.
原始矩阵;
b.
当前所在的位置;
c.
需要修改成的颜⾊。
•
函数体:
a.
先将该位置的颜⾊改成指定颜⾊(因为我们的判断,保证每次进⼊递归的位置都是需要修改的
位置);
b.
遍历四个⽅向上的位置:
▪
如果当前位置合法,并且与初试颜⾊相同,就递归进去。
例题二
算法思路:
遍历整个矩阵,每次找到「⼀块陆地」的时候:
•
说明找到「⼀个岛屿」,记录到最终结果 ret
⾥⾯;
•
并且将这个陆地相连的所有陆地,也就是这块「岛屿」,全部「标记」。这样的话,我们下次遍历到这块岛屿的时候,就不会再记录了,不会影响最终结果。
•
其中「标记」的操作,可以利⽤「深搜」和「宽搜」解决,其实就是
733. 图像渲染
这道题~
这样,当我们,遍历完全部的矩阵的时候,
ret
存的就是最终结果。
全局变量:
int ret;
int m, n;
vector<vector<bool>> visited;
int dx[4] = { 0,0,1,-1 }, dy[4] = {1,-1,0,0};
解法(dfs):void dfs(vector<vector<char>>& grid,int i,int j)
算法流程:
1.
初始化 ret = 0
,记录⽬前找到的岛屿数量;
2.
双重循环遍历⼆维⽹格,每当遇到⼀块陆地,标记这是⼀个新的岛屿,然后将这块陆地相连的陆地全部变成海洋。
递归函数的设计:
1.
把当前格⼦标记为true;
2.
向上、下、左、右四格递归寻找陆地,只有在下标位置合理的情况下,才会进⼊递归:
a.
下⼀个位置的坐标合理;
b.
并且下⼀个位置是陆地
例题三
算法思路:
•
遍历整个矩阵,每当遇到⼀块⼟地的时候,就⽤「深搜」或者「宽搜」将与这块⼟地相连的「整个岛屿」的⾯积计算出来。
•
然后在搜索得到的「所有的岛屿⾯积」求⼀个「最⼤值」即可。
•
在搜索过程中,为了「防⽌搜到重复的⼟地」:
◦
可以开⼀个同等规模的「布尔数组」,标记⼀下这个位置是否已经被访问过;
◦
也可以将原始矩阵的 1
修改成
0
,但是这样操作会修改原始矩阵。
4.
解法(深搜 dfs):
算法流程:
•
主函数内:
a.
遍历整个数组,发现⼀块没有遍历到的⼟地之后,就⽤ dfs
,将与这块⼟地相连的岛屿的⾯积求出来;
b.
然后将⾯积更新到最终结果 ret
中。
•
深搜函数 dfs
中:
a.
能够进到 dfs
函数中,说明是⼀个没遍历到的位置;
b.
标记⼀下已经遍历过,设置path = 1
(当前这个位置的⾯积为
1
),记录最终的⾯积;
c.
上下左右遍历四个位置:
▪
如果找到⼀块没有遍历到的⼟地,就将与这块⼟地相连的岛屿⾯积累加到 path
上;
d.
循环结束后, path
中存的就是整块岛屿的⾯积,返回即可。
全局变量:
vector<vector<bool>> visited;
int m, n;
int path;
int dx[4] = { 0,0,1,-1 }, dy[4] = { 1,-1,0,0 };
函数:void dfs(vector<vector<int>>& grid, int i, int j)
例题四
解法:
算法思路:
正难则反。
可以先利⽤
dfs
将与边缘相连的
'0'
区域做上标记,然后重新遍历矩阵,将没有标记过的
'0'
修改成
'X'
即可。
例题五
解法:
算法思路:
正难则反。
如果直接去判断某⼀个位置是否既能到⼤西洋也能到太平洋,会重复遍历很多路径。
我们反着来,从⼤西洋沿岸开始反向
dfs
,这样就能找出那些点可以流向⼤西洋;同理,从太平洋沿岸也反向 dfs
,这样就能找出那些点可以流向太平洋。那么,被标记两次的点,就是我们要找的结果。
例题六
解法:
算法思路:
模拟类型的
dfs
题⽬。
⾸先要搞懂题⽬要求,也就是游戏规则。
从题⽬所给的点击位置开始,根据游戏规则,来⼀次
dfs
即可。
例题七
算法思路:
这是⼀道⾮常典型的「搜索」类问题。
我们可以通过「深搜」或者「宽搜」,从
[0, 0]
点出发,按照题⽬的「规则」⼀直往
[m - 1, n - 1] 位置⾛。 同时,设置⼀个全局变量。每次⾛到⼀个合法位置,就将全局变量加⼀。当我们把所有能⾛到的路都⾛完之后,全局变量⾥⾯存的就是最终答案。
4.
解法(dfs):
算法流程:
•
递归函数设计:
a.
参数:当前所在的位置 [i, j]
,⾏⾛的边界
[m, n]
,坐标数位之和的边界
k
;
b.
递归出⼝:
i.
[i, j]
的坐标不合法,也就是已经超出能⾛的范围;
ii.
[i, j]
位置已经⾛过了(因此我们需要创建⼀个全局变量 visited
,来标记当前位置是否⾛过);
iii.
[i, j]
坐标的数位之和⼤于
k
;
上述情况的任何⼀种都是递归出⼝。
c.
函数体内部:
i.
如果这个坐标是合法的,就将全局变量 ret++
;
ii.
然后标记⼀下 [i, j]
位置已经遍历过;
iii.
然后去 [i, j]
位置的上下左右四个⽅向去看看。
•
辅助函数:
a.
检测坐标 [i, j]
是否合法;
b.
计算出 i
,
j
的数位之和,然后与
k
作⽐较即可。
•
主函数:
a.
调⽤递归函数,从
[0 ,0]
点出发。
•
辅助的全局变量:
a.
⼆维数组 visited
:标记
[i, j]
位置是否已经遍历过;
b.
变量 ret
:记录⼀共到达多少个合法的位置。
c.
上下左右的四个坐标变换。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Guff_9hys/article/detail/1003171
推荐阅读
article
讲解基于
图
神经网络
的情绪识别
深度
学习
模型
DGCNN
(附基础原理讲解和代码讲解)_
深度
学习
多项式
滤波器
...
频谱
图
理论 (Spectral Graph Theory)是用线性代数概念(如特征向量和特征值理论)研究
图
的性质。(想要...
赞
踩
article
数据结构
——链式
二叉树
(续)_
二叉树
中
查找
值为x
的
结点
;...
文章详细介绍了链式
二叉树
中
查找
特定值
的
节点方法,通过递归实现并优化了
查找
过程。接着讲解了如何使用层序遍历进行
二叉树
的
遍历...
赞
踩
article
简单
漏洞
渗透
复现
_
简易
漏洞
复现
...
注意事项:想要实现Metasploit的具体应用,需要靶机运行payload.exe这个kali生成的执行文件,将kal...
赞
踩
article
RabbitMQ
死信
队列_
rabbitmq
实现
死信
队列...
本文介绍了
死信
队列在
RabbitMQ
中的使用,包括如何处理过期未支付的订单、消息消费失败和队列满等情况,以及如何通过设置...
赞
踩
article
Android
MediaRecorder
视频
录制
及报错解决...
Android
使用
MediaRecorder
类来
录制
视频
。
Android
使用
MediaRecorder
类来
录制
视频
模糊解...
赞
踩
article
了解一下
内
测系统
...
达到让用户使用游戏或者软件的时候体验感更好、减少风险、方便开发者更好的找到并解决自己软件中的问题。测试好后的app可以将...
赞
踩
article
ROS
分布式
多
机
通信
(主从
机
配置)_ros
ssh
主从
机
...
由于在我们使用
ROS
进行
机
器人开发的时候,比如,调试智能车,硬件资源有限或者不能直接进行开发、计算的时候,我们常常会进行...
赞
踩
article
适合
初学者
的
自然语言
处理
(
NLP
) 综合指南
_
自然语言
处理
入门...
自然语言
处理
(
NLP
) 是人工智能 (AI) 最热门
的
领域之一,现在主要指大语言模型了。这要归功于人们热衷于能编写故事...
赞
踩
article
数据库
连接池
原理 示例...
import java.sql.Connection;import java.sql.DatabaseMetaData;...
赞
踩
article
2024年最新
的
Stable
Diffusion
整合
包安装(附安装包)_
stable
diffusi...
SD技术以其创新
的
人工智能能力而著称,它拥有根据用户输入
的
文字描述来创造细致且富有表现力
的
图像
的
独特本领。SD不仅能够生...
赞
踩
article
【独家】
华为
OD
机试
-
小朋友
排队
(C 语言解题)_
算法
学生重新
排队
...
本文介绍了
华为
OD
机试
中的一道题目——
小朋友
排队
问题,要求根据身高数组找到满足条件的最短移动距离。文章提供了示例输入和输...
赞
踩
article
【
GLM
-4
部署
实战】
GLM
-4-
9B
-
Chat
模型
之
vLLM
部署
推理
实践...
在人工智能的广袤领域中,大型语言
模型
(LLM)的
推理
和
部署
是实现智能应用的关键步骤。
vLLM
框架,以其卓越的性能和易用性...
赞
踩
article
函数调用
模型_
调用函数
建模...
函数调用
,堆内存的使用_
调用函数
建模
调用函数
建模 C++...
赞
踩
article
Codeforces
Global
Round
12 E.
Capitalism
差分
约束_co...
传送门题意:思路: 一开始被题意迷惑了,没看出来
差分
约束,老菜鸡啦。首先看到aj=ai+1a_j=a_i+1aj=ai...
赞
踩
article
JavaScript
中
的
对象
,
入职3
个
月
的
前端
程序员
面临
转正
,
四轮面试后多久出结果_
前端
转正
考核难吗...
如果你已经下定决心要转行做编程行业
,
在最开始
的
时候就要对自己
的
学习有一
个
基本
的
规划
,
还要对这
个
行业
的
技术需求有一
个
基本
的
...
赞
踩
article
【
PYTHON
】模块
函数
之
pywinauto
PC 端的
自动化
(笔记)_
pywinauto
控件
速...
pywinauto
PC 端的
自动化
(笔记)_
pywinauto
控件
速度 慢
timeout
pywinauto
控件
...
赞
踩
article
深入
解析
Python
XML
操作
:技术实战技巧...
本文详细介绍了
Python
XML
操作
的基础知识,包括
XML
解析
库的介绍、xml.etree.ElementTree和l...
赞
踩
article
2024年最新零基础转
行
前端开发
工程师
,
行
吗?
,
字节跳动
面试
太难了...
JavaScript是一种轻量级的脚本语言
,
从最初用于输入数据验证的目的
,
逐步发展到成为一门功能全面的编程语言
,
其使用范...
赞
踩
article
4.
RabbitMQ
消息
模型_
rabbitmq
多个
消费
者
消费
一个
消息
...
RabbitMQ
消息
模型_
rabbitmq
多个
消费
者
消费
一个
消息
rabbitmq
多个
消费
者
消费
一个
消息
...
赞
踩
article
[错误解决]
Ubuntu
中
使用
dpkg
安装
deb
文件提示
依赖
关系
问题
,仍未被配置...
使用
dpkg
进行软件安装时,提示:
dpkg
:处理软件包XXX时出错:
依赖
关系
问题
,仍未被配置
使用
如下命令,sudo ap...
赞
踩
相关标签
深度学习
神经网络
人工智能
图论
健康医疗
pytorch
机器学习
数据结构
二叉树
安全
网络
rabbitmq
ruby
分布式
start failed
-19
视频录制
音频录制
录制视频模糊
视频
阿里云OSS
ios
iphone
个人开发
ROS