磊磊零基础打卡算法:day20 c++dfs树的深度优先遍历
2024-10-21 09:10:57
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;
}
最新文章
- RabbitMq应用一的补充(RabbitMQ的应用场景)
- SQL分页查询的几种方式
- javascript 对象初探(二)--- 返回对象的函数
- 在Windows下配置Python+Django+Eclipse开发环境
- MongoVUE
- backgroundworker的使用问题
- python webdriver测试报告
- WebGoat学习——SQL注入(SQL Injection)
- windows和linux间互传文件
- loadrunner 一个诡异问题
- c# 数据类型转换 as(C# 参考)
- onoffswitch-checkbox
- synchronized关键字的详细分析和代码实例
- 企业IT管理员IE11升级指南【8】—— Win7 IE8和Win7 IE11对比
- LR 11	代理录制步骤
- Python全栈学习_day001作业
- 【3dsmax2016】安装图文教程、破解注册以及切换语言方法
- JAVA 图像操作辅助类
- 消息队列内核结构和msgget、msgctl 函数
- pycharm调试