搜索
查看
编辑修改
首页
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
浅谈数据中台_数据中台传输日志内容
2
python脚本 数据库压力测试_Python 压力测试脚本
3
JVM--堆内存结构
4
deepin 安装docker遇到无法拉取的问题_dify镜像拉不下来
5
3:3链队列_链队列中queueptr
6
autodl运行cpolar报错System has not been booted with systemd as init system (PID 1). Can‘t operate.Faile_autodl+cpolar
7
深入理解时间序列分析: 了解数据的时间变化模式
8
python分布式项目_Python——分布式监控项目
9
TortoiseGit连接Github_tortoisegit 访问远程github
10
各种滤波算法
当前位置:
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?site
推荐阅读
article
IIS
短
文件名
泄露
漏洞
复现_iis
短
文件名
漏洞
复现...
本文详细介绍了
IIS
短
文件名
泄露
漏洞
,包括其产生原理、
漏洞
描述、验证方法以及防御措施。该
漏洞
允许攻击者通过8.3 DOS...
赞
踩
article
保姆级教程|如何
配置
ROS1
主从
机
_
ros1
主从
配置
...
你可以将端口号设置为其他值,只要确保双方一致并且端口未被其他服务占用。启动ROSMaster或者网络连接测试:在每个板子...
赞
踩
article
而立之年
——回顾我
的
前端
转
行
之路_
学习
前端
工作
一年被迫
转
go
工作
半年 还能重拾
前端
吗...
本文是一位程序员从高中学历
的
体力
工作
者
转
行
为
前端
开发者
的
真实经历。他分享了自学编程
的
过程,从选择
前端
入门,到通过w3cs...
赞
踩
article
适合
初学者
的
自然语言
处理
(
NLP
) 综合指南
_
自然语言
处理
入门...
自然语言
处理
(
NLP
) 是人工智能 (AI) 最热门
的
领域之一,现在主要指大语言模型了。这要归功于人们热衷于能编写故事...
赞
踩
article
linux
下的
定时
任务
_
linux
定时
任务
...
linux
下的
定时
任务
_
linux
定时
任务
linux
定时
任务
...
赞
踩
article
用
TypeScript
写
贪吃蛇
(1):开发环境搭建_
tsconfig
指定
类型
文件
入口
...
0. 参考资料尚硅谷2021版
TypeScript
教程: https://www.bilibili.com/video/...
赞
踩
article
记
忆
化
搜索
——
AcWing
901.
滑雪
_
忆
化
搜索
】901.
滑雪
...
记
忆
化
搜索
是一种结合了
搜索
和动态规划思想的方法。它通过将已经计算过的结果存储起来,在后续遇到相同情况时直接返回存储的结果...
赞
踩
article
【
Nacos
】
docker
部署
nacos
服务
...
【代码】【
Nacos
】
docker
部署
nacos
服务
。【
Nacos
】
docker
部署
nacos
服务
...
赞
踩
article
host
头
攻击...
原因一般而言,几个网站以共享的方式宿驻在同一台web服务器之上,或者几个web应用程序共享同一个IP地址,这都是业界一些...
赞
踩
article
【
Leetcode
】十八、
动态
规划
:不同
路径
+ 全1的最大
正方形
...
因为只能向下、向右走,所以从起始点走到点(R,C),
路径
数等于,以起始点到点(R,C)为对角线的矩形里,到点(R,C)左...
赞
踩
article
维吾尔语
小
程序开发
个人中心插件_
bbq855
.
xyz
...
如果你在小
程序开发
当中遇到个人中心问题的时候,可以给你提供很好的资源。希望使用这个插件做出你自己的完整的项目。学习目标:...
赞
踩
article
Datawhale
X 魔搭
AI
夏令营
第四期
AI
GC方向笔记
task1
...
文生图主要以SD系列基础模型为主,以及在其基础上微调的lora模型和人物基础模型等。接下来,我们简单了解下提示词、lor...
赞
踩
article
吴恩达机器
学习
课后作业
Python
实现(一):
线性
回归
_
python
单
变量
线性
回归
定义损失
函数
...
吴恩达机器
学习
作业一
线性
回归
python
实现,注释详细_
python
单
变量
线性
回归
定义损失
函数
python
单
变量
线性
回...
赞
踩
article
pywinauto
入门指南:轻松掌握
Windows
GUI
自动化
_
pywinauto
中文
教程
...
一款
pywinauto
库为
Windows
GUI
自动化
而设计的Python库.它允许用户编写脚本来与
Windows
应用程...
赞
踩
article
Edge
浏览器
支持
IE
内核 / 增加
Edge
兼容性
_
edge
ie
内核...
微软新推出的
Edge
浏览器
有很多优势,例如:数据同步(包含收藏夹,扩展,密码等数据),第三方扩展支持,垂直标签页,等功能...
赞
踩
article
advancedFPGA
---
时序
分析_
setup
recovery
...
Achievements provide the only preasure in life.静态
时序
分析(Static...
赞
踩
article
Linux
服务器
升级
openssh
9.8
详解!!_
linux
openssh
离线
rpm
升级到9...
2024年7月1日,
openssh
发布了最新版
9.8
,但是下载最新版
openssh
9.8
,也需要将 openssl ...
赞
踩
article
【代码
随想录
Day33
】
贪心
算法
/DP...
本文介绍了三道LeetCode
算法
题,包括如何在进行1005次取反操作后最大化数组和,如何在有限汽油量的情况下完成加油站...
赞
踩
article
『
OpenStack
』云
计算
平台『
Nova
』
计算
服务
学习指南_
openstack
nova
...
本文将会讲解
OpenStack
平台
计算
服务
组件
Nova
,结合抽象概念和简单易懂的实战操作,帮助您更好的理解 No...
赞
踩
article
搞懂
mysql
索引
有
这
一篇就够(呕心狂写一万
字
,
保姆级
mysql
索引
技巧)_
mysql
索引
...
例如
,
这
里由sid、sname和age 3个
字
段构成的
索引
,
索引
行中就按sid/sname/age的顺序存放
,
索引
可以索...
赞
踩
相关标签
web安全
ubuntu
linux
算法
编程语言
前端
javascript
自然语言处理
人工智能
NLP
Hugging Face
Transformer
bash
运维
typescript
webpack
docker
容器
leetcode
动态规划
vue.js
小程序
AIGC
笔记