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;
    }

最新文章

  1. RabbitMq应用一的补充(RabbitMQ的应用场景)
  2. SQL分页查询的几种方式
  3. javascript 对象初探(二)--- 返回对象的函数
  4. 在Windows下配置Python+Django+Eclipse开发环境
  5. MongoVUE
  6. backgroundworker的使用问题
  7. python webdriver测试报告
  8. WebGoat学习——SQL注入(SQL Injection)
  9. windows和linux间互传文件
  10. loadrunner 一个诡异问题
  11. c# 数据类型转换 as(C# 参考)
  12. onoffswitch-checkbox
  13. synchronized关键字的详细分析和代码实例
  14. 企业IT管理员IE11升级指南【8】—— Win7 IE8和Win7 IE11对比
  15. LR 11 代理录制步骤
  16. Python全栈学习_day001作业
  17. 【3dsmax2016】安装图文教程、破解注册以及切换语言方法
  18. JAVA 图像操作辅助类
  19. 消息队列内核结构和msgget、msgctl 函数
  20. pycharm调试

热门文章

  1. clickhouse 重启,软连接失效,增加存储路径
  2. Java-面向对象基础 构造方法
  3. Vue v-once指令 和 v-pre指令
  4. RTT笔记-分析自动初始化机制转
  5. Luogu7912
  6. 放苹果 tzoj2679 //自然数拆分 tzoj5827;(dp)
  7. 摘抄笔记 centos内核优化
  8. Miller-Rabin素性判定算法
  9. 127. Word Ladder via java
  10. xshell和xftp绿色版下载