搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小舞很执着
这个屌丝很懒,什么也没留下!
关注作者
热门标签
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
redis7 高级篇4 mysql和redis的双写一致性实现案例_redis和mysql数据一致性的案例
2
Windows环境下安装Nacos_windows安装nacos
3
【云原生 • DevOps】devOps 入门、Maven 插件自动部署微服务_devops maven配置
4
FPGA学习笔记【FPGA原理与结构】_逻辑深度如何降低
5
vue2+@tinymce/tinymce-vue富文本编辑器的实现_tinymce5.10.9
6
预训练(Pre-training)
7
【文生图系列系列】腾讯混元文生图大模型HunyuanDiT
8
PulsarRPAPro-AI高速采集并自动提取网页数据
9
python划分语句的方式是什么?python为什么要划分语句?_python语句块内
10
解决adb的adb server version (32) doesn't match this client (36)或(35)_error: could not install *smartsocket* listener: a
当前位置:
article
> 正文
BFS和DFS算法原理(通俗易懂版)
作者:小舞很执着 | 2024-06-19 17:59:03
赞
踩
bfs
DFS 算法
思想:一直往深处走,直到找到解或者走不下去为止
BFS算法
DFS:使用
栈
保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。
BFS:使用
队列
保存未被检测的结点。结点按照宽度优先的次序被访问和进出队列。
框架:
BFS:
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=100;
bool vst[maxn][maxn]; // 访问标记
int dir[4][2]={0,1,0,-1,1,0,-1,0}; // 方向向量
struct State // BFS 队列中的状态数据结构
{
int x,y; // 坐标位置
int Step_Counter; // 搜索步数统计器
};
State a[maxn];
bool CheckState(State s) // 约束条件检验
{
if(!vst[s.x][s.y] && ...) // 满足条件
return 1;
else // 约束条件冲突
return 0;
}
void bfs(State st)
{
queue <State> q; // BFS 队列
State now,next; // 定义2 个状态,当前和下一个
st.Step_Counter=0; // 计数器清零
q.push(st); // 入队
vst[st.x][st.y]=1; // 访问标记
while(!q.empty())
{
now=q.front(); // 取队首元素进行扩展
if(now==G) // 出现目标态,此时为Step_Counter 的最小值,可以退出即可
{
...... // 做相关处理
return;
}
for(int i=0;i<4;i++)
{
next.x=now.x+dir[i][0]; // 按照规则生成
下一个状态
next.y=now.y+dir[i][1];
next.Step_Counter=now.Step_Counter+1; // 计数器加1
if(CheckState(next)) // 如果状态满足约束条件则入队
{
q.push(next);
vst[next.x][next.y]=1; //访问标记
}
}
q.pop(); // 队首元素出队
}
return;
}
int main()
{
......
return 0;
}
DFS:
DFS:
/*
该DFS 框架以2D 坐标范围为例,来体现DFS 算法的实现思想。
*/
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=100;
bool vst[maxn][maxn]; // 访问标记
int map[maxn][maxn]; // 坐标范围
int dir[4][2]={0,1,0,-1,1,0,-1,0}; // 方向向量,(x,y)周围的四个方向
bool CheckEdge(int x,int y) // 边界条件和约束条件的判断
{
if(!vst[x][y] && ...) // 满足条件
return 1;
else // 与约束条件冲突
return 0;
}
void dfs(int x,int y)
{
vst[x][y]=1; // 标记该节点被访问过
if(map[x][y]==G) // 出现目标态G
{
...... // 做相应处理
return;
}
for(int i=0;i<4;i++)
{
if(CheckEdge(x+dir[i][0],y+dir[i][1])) // 按照规则生成下一个节点
dfs(x+dir[i][0],y+dir[i][1]);
}
return; // 没有下层搜索节点,回溯
}
int main()
{
......
return 0;
}
本文内容由网友自发贡献,转载请注明出处:
【wpsshop博客】
推荐阅读
article
Flutter
之
TabBar
篇_
flutter
tabbar
...
使用方法:第二种采用的三方插件第三种自定义_
flutter
tabbar
flutter
tabbar
...
赞
踩
article
力扣138 -
复制
带
随机
指针
的
链表
【
复杂
链表
的
终极试炼】...
25805)]力扣138 -
复制
带
随机
指针
的
链表
【
复杂
链表
的
终极试炼】 ...
赞
踩
article
数据库
建表
设计规范
及原则
_
数据库
建表
规范...
建表
规约强制要求 表达是/否概念的字段,使用is
_
xxx的方式命名(代码中不建议以is开头命名),数据类型是bit(长度...
赞
踩
article
2024 年
MySQL
8.0
安装
配置
教程 最简易(保姆级)_
mysql
安装
...
首先去官网下一个
MySQL
MySQL
:: Download
MySQL
Installer这里没有看到64位的
安装
包,...
赞
踩
article
NLP
汉语
分词
...
利用人民日报语料库或自己构建的语料库(30词以上)作为词典,任选五个句子,并基于正向最大匹配算法和最短路径法分别对这五个...
赞
踩
article
【AI大
模型
】在
健康
睡眠
监测
中的
深度
融合
与实践案例_ai大
模型
在
健康
睡眠
监测
中的
深度
融合
与实践案例...
通过AI大
模型
与穿戴设备的
深度
融合
,可以实现更加智能和个性化的
睡眠
监测
与管理。多模态数据
融合
、实时
监测
与反馈、个性化建议...
赞
踩
article
2024年安卓最新
面试
100%
完全掌握:
重新认识
View
的
绘制
流程
(1),字节跳动
面试
官级别...
!最后放上一个大概
的
Android学习方向及思路(详细
的
内容太多了~),提供给大家:对于程序员来说,要学习
的
知识内容、技...
赞
踩
article
resin
中间件
版本
信息
查看_
resin
版本
怎么查看...
resin
中间件
版本
信息
_
resin
版本
怎么查看
resin
版本
怎么查看 找到
resin
安...
赞
踩
article
深度
网络
Fine
-
tuning
方法简介_
nllb
-200
fine
-
tuing
...
转自:http://blog.csdn.net/wendox/article/details/52840372迁移学习有...
赞
踩
article
切割
游戏
介绍_
切割
趣味
游戏
带给
玩家
的
好处...
上大学时,在学校实验室里玩过一个貌似使用VC写
的
小
游戏
,一个小球在界面上四处游荡,
玩家
使用鼠标
切割
背景,将背景
切割
剩余到...
赞
踩
article
算法---
DFS
和
BFS
_
dfs
和
bfs
...
转载自 :简介: 深度优先遍历(Depth First Search, 简称
DFS
) 与广度优先遍历(Breath F...
赞
踩
article
AIGC
-
高考
语文
作文
全国篇...
突发奇想,想试试说用AI写
高考
作文
会有什么样的结果,以下是两次训练结果:哈哈
AIGC
-
高考
语文
作文
全国篇 ...
赞
踩
article
sql
注入各种
绕过
_
sql
注入
绕过
...
sql
注入
绕过
_
sql
注入
绕过
sql
注入
绕过
1.注释符...
赞
踩
article
rabbitMQ
七种
模式
介绍与
应用
场景
_
mq
广播...
队列类型_
mq
广播
mq
广播 七种
模式
介绍与
应用
场景
简单
模式
(Hello World) ...
赞
踩
article
Perl
语言
入门...
Perl
语言
是拉里.沃尔(Larry Wall)在1987年开发的一种编程
语言
,借鉴了C、sed、awk、shell脚本...
赞
踩
article
AIGC
全面介绍
_
aigc
简介...
随着人工智能技术的不断进步,生成式人工智能(AI Generated Content,
AIGC
)成为了一个日益热门的话...
赞
踩
article
C++
调用
yolo
模型
有哪些方法_
yolo
c++
...
你可以将YOLO
模型
转换为TensorRT优化过的引擎文件,并在
C++
中使用TensorRT的API进行高性能推理。Op...
赞
踩
article
DFS
入门——全
排列
...
如果你不太懂图,你也可以试着理解这么一段话:“对于每条路,既然选择了,就走..._dfsdfs ...
赞
踩
article
Kafka
—
工作
流程
、如何
保证
消息
可靠性_
kafka
工作
流程
...
分布式事件流平台。希望不仅仅是存储数据,还能够数据存储、数据分析、数据集成等功能。
消息
队列(把数据从一方发给另一方),消...
赞
踩
article
代码
随想录
day34
|1005. K 次
取反
后
最大化
的
数组
和|134.
加油站
|135. 分发糖果|...
笔记_k次
取反
后
最大化
的
数组
和
代码
随想录
k次
取反
后
最大化
的
数组
和
代码
随想录
代码
随想录
d...
赞
踩
相关标签
flutter
leetcode
链表
网络
mysql
sql
数据库
database
自然语言处理
人工智能
AI
穿戴设备
睡眠监测
健康
android
面试
学习
中间件
qt android qml
java
高考
AI写作
web安全
安全