5.24
dfs深度优先搜索:
-
思想比较简单,就是一条路走到底,走到最深点处再回退一步,再看有没有路可以走,没有的话再回退一步,重复此步骤;
-
也是人们常讲的暴搜。
主要的用法:
-
通常需要一个状态数组来记录每次走路时侯的状态,如果走过就将他变成true,再走完之后,需要回头的情况就需要将其变成原来状态,如false;
-
state[i] = true;//修改状态 dfs(u + 1);//填下一层的位置 state[i] = false;//回溯,返回上一层的状态
-
重要的是dfs的顺序,从哪里开始,从哪一层开始;
例题:https://www.acwing.com/solution/content/30988/
-
对输入的数进行全排列:
-
#include "iostream" using namespcae std; const int N =10; int p[N];//用来记录所有结点的所有值; bool st[N]//记录状态; void dfs(int u){ if(u==n){ //如果到达了最下面的一层,也就是满足了所有值都试了一遍,那么就是输出的条件 for(int i = 0;i<n;i++)cout<<p[i]<<" "; cout<<endl; }for(int i =1;i<=n;i++){ //因为是对1~n的全排列,所以这里从i=1开始 if(!st[i]){ //如果当前位置的值是没有被尝试过的 p[u]=i; //将p数组对应的位置,进行赋值,这里的u是指层数, st[i] =true; dfs(u+1); st[i] =false; } } } int main(){ cin>>n; dfs(0); //意思就是从0位置处开始进行结点的遍历 return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)