搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
繁依Fanyi0
这个屌丝很懒,什么也没留下!
关注作者
热门标签
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
离线存储网页服务器无响应,网页保存应注意的问题
2
大数据分析培训课程python时间序列预测SARIMAX模型教程
3
【算法】动态规划法_如何从动态规划算法所生成的表中
4
在安卓手机上安装Ubuntu详细教程(无需root)_安卓无root装ubuntu
5
最新互联网大厂职位薪资,快来对号入座吧_大厂架构师年薪结构
6
Do not mutate vuex store state outside mutation handlers.
7
pmp公式整理一览_pmp 静态回收期 动态回收期
8
load a PyTorch model from a TF 2.0 checkpoint, please set from_tf=True
9
<el-tabs>Tabs 标签页增加标签页按钮样式优化_el-tabs before-leave
10
Macbook M1版安装安卓模拟器_mac m1 安卓模拟器
当前位置:
article
> 正文
递归、搜索与回溯算法:FloodFill 算法
作者:繁依Fanyi0 | 2024-05-03 00:32:26
赞
踩
递归、搜索与回溯算法:FloodFill 算法
例题一
算法思路:
可以利⽤「深搜」或者「宽搜」,遍历到与该点相连的所有「像素相同的点」,然后将其修改成指定的像素即可。
全局变量:
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/繁依Fanyi0/article/detail/526862
推荐阅读
article
Find
My
无人机
|
苹果
Find
My
技术与
无人机
结合
,
智能
防
丢
,
全球定位...
未来
Find
My
将独立成网
,
第三方设备的加入
,
将丰富
Find
My
Network的版图。在航拍、农业、植保、微型自拍...
赞
踩
article
python
学习笔记-
修改
pip
下载
源
-创建
虚拟环境
_
pip
源
修改
...
修改
下载
源
目的:提高
下载
包的速度.参考方法一:#安装管理软件
pip
install pqi#相关命令:D:\pyspac...
赞
踩
article
[
LeetCode
]每日一题058:
最后
一个
单词
的长度_给你
一个
字符串
s
,由若干
单词
组成
...
看题:
最后
一个
单词
的长度,leetcode原题给你
一个
字符串
s
,由若干
单词
组成
,
单词
之间用单个或多个连续的空格字符隔开...
赞
踩
article
Ubuntu
之
apt
更换国内
镜像
源
_
apt
镜像
源
...
如果我们只是需要修改当前版本的
镜像
源
地址为国内地址,我们可以使用sed命令替换
镜像
源
网站地址的方式替换,即方式二和方式三...
赞
踩
article
【
数据结构
】 初识
集合
框架
...
这里博主将简单介绍一下
集合
框架
,想要详细了解的可以点击下方链接进行查看java
集合
官方教程Java
集合
框架
,又被称为容...
赞
踩
article
顶象
vivo
滑块
_顶象
滑块
vivo
...
肝了一天的顶象
vivo
滑块
终于搞出来了,参考了许多大佬的文章,我这个只是单纯的通过了但是,顶象由于每天好像要更新暂时没做...
赞
踩
article
9.2
向量
范数
的
三大
不等式
_
范数
不等式
...
介绍了
向量
范数
相关
的
三大
不等式
,并且给出了闵可夫斯基
不等式
的
证明。_
范数
不等式
范数
不等式
...
赞
踩
article
Android
cpu
信息
获取/修改
_
qt
android
获得
cpu
信息
...
随笔
_
qt
android
获得
cpu
信息
qt
android
获得
cpu
信息
CPU
信息
查看 ...
赞
踩
article
基于
Vue3
搭建的低
代码
数据
可视化
开发
平台
_
vue3
开源低
代码
平台
...
框架:基于
Vue3
框架编写,使用hooks写法抽离部分逻辑,使
代码
结构更加清晰;类型:使用TypeScript进行类型约...
赞
踩
article
论文阅读
BiDAF
-
Bidirectional
attention
flow
for machine...
BiDAF
-用于机器理解的双向
注意
力流目录摘要机器理解(MC),回答关于给定文本段落的查询,要求对文本和查询之间的复杂交...
赞
踩
article
git
放弃
本地
更改
,
强制
从
代码
库拉取最新
代码
_
git
pull
强制
更新
本地
代码
...
【
代码
】
git
放弃
本地
更改
,
强制
从
代码
库拉取最新
代码
。_
git
pull
强制
更新
本地
代码
git
pull
强制
更新
本地
...
赞
踩
article
spring
cloud
-
gateway
整合
nacos
_
spring
cloud
gateway
整合...
1、 首先创建一个maven项目2、在pom文件中添加依赖
...
赞
踩
article
【
计算机
毕设文章】基于
微信
小
程序
点餐
系统_
点餐
小
程序
毕业设计
...
毕 业 设 计(论 文)题目:基于
微信
小
程序
点餐
系统摘 要通过移动互联网这几年的发展,单独的开发某些APP已经到了日暮西...
赞
踩
article
【2019全国
职业技能
大赛大数据技术】任务一:
Hadoop
相关
组件
安装
部署
(
15
分_
答案
上<图片+...
叮咚,我回来啦~!!“博主,你再不更新
答案
,我们要取关了哈!!”ahhhh我好怕【擦汗ing】,在此向等待更新的小伙伴表...
赞
踩
article
基于
STM32
单片机
车牌
识别
系统摄像头图像处理蓝牙APP
毕业设计
90_基于
单片机
车牌
识别
毕业设计
...
基于
STM32
单片机
的
车牌
识别
系统设计摄像头图像扫描处理TFT彩屏显示手机蓝牙APP上传设计设计/DIY设计90。_基于...
赞
踩
article
非遗
传承
传统
文化
传承
景点
系统
uniapp
微信
小
程序
的设计与实现
1c6wi
_
微信
小
程序
文旅类模板...
最后要对
系统
进行测试,还要对测试的结果进行总结和分析,为以后
微信
小
程序
的维护提供方便,也为以后类似
微信
小
程序
的开发提供参...
赞
踩
article
2023年全国
职业技能
大赛
软件测试
环境搭建及
系统
部署答案_2023全国
职业院校
技能大赛环境
安装
答案...
2023年全国
职业技能
大赛
软件测试
环境搭建及2023年全国
职业技能
大赛
软件测试
环境搭建及
系统
部署答案
系统
部署答案_202...
赞
踩
article
MySQL
的
数据备份
和恢复...
本博客主要内容涉及到mysql数据库的备份和恢复
MySQL
的
数据备份
和恢复 ...
赞
踩
article
Java基于
springboot
+
vue
的
旅游
管理系统
的
设计
与实现_基于
springboot
+
vue
...
随着
旅游
业的迅速发展,传统的
旅游
信息查询方式,已经无法满足用户需求,因此,结合计算机技术的优势和普及,针对常州
旅游
,特开...
赞
踩
article
2023年
全国
职业院校
技能
大赛
模块B:
Windows
+
Linux
服务部署
—
—
完整版、视频配置+赛题...
基于2023年
全国
职业院校
技能
大赛
—
—
网络
系统管理赛项
—
—
Windows
+
Linux
服务部署
—
—
完整版(包含 视频配置+...
赞
踩
相关标签
科技
蓝牙
物联网
find my
python
学习笔记
leetcode
算法
ubuntu
apt
国内镜像源
阿里云apt镜像源
清华大学镜像源
数据结构
集合框架
java
js
web安全
线性代数
android
信息可视化
git
spring cloud
gateway