当前位置: 首页 > news >正文

20250901 搜索总结

引子

什么叫搜索?就是通过一定的顺序经过点之间的边到达图上的其他点。进行图上枚举时,通常需要遵循特定的顺序。例如,当寻找两点之间的路径时,必须严格按照图的边进行枚举。

深度优先搜索

深度优先搜索(DFS)主要特点是不撞南墙不回头,就是每次找出一条没有走过的边继续搜索,直到没有边可走了就开始回溯,回到上一个点,继续搜索。

对于某些节点,只需搜索一次即可,但需额外判断目标节点是否已被搜索过。

有些题目表面上看不出与图相关,但可以通过状态空间来理解。将其建模为图结构后,就能在对应的图上进行搜索。

实际操作中,通常不需要显式构建整张图,只需在每个状态(顶点)处找出所有可能的转移(边)即可.

例题,求n的全排列。

#include<bits/stdc++.h>
using namespace std;
int a[10],n;
bool f[10];
void dfs(int k){if(k>n){//如果目标数组长度为nfor(int i=1;i<=n;i++){//直接输出cout<<"    "<<a[i];}cout<<endl;return;//别跑了}for(int i=1;i<=n;i++){//查看每一个数if(!f[i]){//如果没有用过f[i]=1;//把他用了a[k]=i;//记录dfs(k+1);//继续深搜f[i]=0;//把他还回去}}
}
int main(){cin>>n;dfs(1);return 0;
} 

广度优先搜索

广度优先搜索(BFS)他的搜索策略就不一样了,它首先把周围的点跑一边然后再找离他最近的一个点继续广搜。总结起来就是先近后远。

写的时候要用一个队列实现,这个队列用来存储即将要搜索的节点。

首先从一个点出发,把他放到队列里,然后每次拿到队列开头,看可以到哪里去,就把能到的点放到队列里去,循环直到队列为空。

由于队列遵循先进先出的原则,距离起点较近的节点会优先入队,因此每次取出的队头始终是离起点最近的节点。

在求解无权图的最短路径时,BFS是最佳选择,因为它能确保首次访问某个节点时,该路径必定是最短路径。

http://www.xdnf.cn/news/1442071.html

相关文章:

  • 免费专业软件推荐 | 图片/PDF水印添加神器:艾克斯水印工具使用全攻略
  • java中二维数组笔记
  • Git或TortoiseGit的小BUG(可解决):空库报错Could not get hash of ““
  • Nginx中的内置变量、指令、URL重写功能及其虚拟主机配置、负载均衡配置
  • 关于linux编程——网络编程2
  • 工业4.0时代的通信革命:OPC UA Pub/Sub机制全面解析
  • 百万级并发下的微服务架构设计之道:从阿里双11看分布式系统核心原则与落地实践
  • 云计算培训为什么这么贵?
  • EagleTrader观察|你的固定心态,可能正在悄悄让你交易破产
  • Element UI MessageBox 渲染虚拟节点的坑与解决方案
  • 【深度学习新浪潮】用3DGS做三维重建有哪些主要的技术路线可供选择?
  • 【随手记】vscode中C语言满足KR风格的方法
  • Leetcode—695. 岛屿的最大面积【中等】
  • Docker实战指南:从安装到架构解析
  • 【Linux】网络(中)
  • 数据结构:栈和队列(上)
  • 数据结构从青铜到王者第十九话---Map和Set(2)
  • 下载必要软件
  • Qt读写Excel--QXlsx基本使用
  • 基于-轻量级文档搜索系统的测试报告
  • 【GM3568JHF】FPGA+ARM异构开发板 使用指南:WIFI
  • SQLite3 操作指南:SQL 语句与 ORM 方法对比解析​
  • 存算一体:重构AI计算的革命性技术(1)
  • K8s Pod CrashLoopBackOff:从镜像构建到探针配置的排查过程
  • react-android-0.80.2-debug.aar下载很慢
  • GitHub 宕机自救指南技术文章大纲
  • Flutter Android真机器调式,虚拟机调试以及在Vscode中开发Flutter应用
  • 充电座结构设计点-经验总结
  • 10.2 工程学中的矩阵(2)
  • Android/Java 异常捕获