• 深度优先搜索dfs 讲解教程


    一、数字全排列

    小哈面前有三个箱子,手上有1,2,3三张牌,规定能放小牌就放小牌,小哈放完最后一个箱子后,最后在箱子的牌能有几种排列?

    二、代码实现

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 10;
    int a[N];
    bool st[N];
    int n = 3;
    
    //函数说明:填充第几个盒子
    void dfs(int step) {
        //如果全部填充完毕,走到了最后虚拟的n+1号盒子面前,就表示前面都完成了正确填充
        if (step == n + 1) {
            for (int i = 1; i <= n; i++) cout << a[i] << " ";
            cout << endl;
            return;
        }
        //每一个数字都可以用来填充
        for (int i = 1; i <= n; i++)
            //如果没有使用过
            if (!st[i]) {
                //放里
                a[step] = i;
                //标识已使用
                st[i] = true;
                //填充下一个
                dfs(step + 1);
                //标识未使用
                st[i] = false;
            }
    }
    
    int main() {
        //开始填充第一个盒子
        dfs(1);
        return 0;
    }
    

    三、[][][] + [][][] = [][][] 问题

    
    #include <bits/stdc++.h>
    
    using namespace std;
    const int N = 10;
    
    int a[N];
    bool st[N];
    int n = 9;
    
    void dfs(int step) {
        if (step == n + 1) {
            if ((a[1] * 100 + a[2] * 10 + a[3]) + (a[4] * 100 + a[5] * 10 + a[6]) == a[7] * 100 + a[8] * 10 + a[9]) {
                for (int i = 1; i <= 9; i++) printf("%d ", a[i]);
                printf("
    ");
            }
            return;
        }
        for (int i = 1; i <= n; i++) {
            if (!st[i]) {
                a[step] = i;
                st[i] = true;
                dfs(step + 1);
                st[i] = false;
            }
        }
    }
    
    int main() {
        dfs(1);
        return 0;
    }
    

    五、套路总结

    深度优先搜索的基本模型

    void dfs(int step)
       {
       //1、判断边界.收集结果
    
       //2、尝试每一种可能     
       for(i=1;i<=n;i++){
          //继续下一步        
            dfs(step+1);
        }
    }
    

    六、回溯与深度优先算法的关系总结

    回溯与深度优先算法的关系总结

  • 相关阅读:
    计算机网络学习目录
    手把手教你玩微信小程序跳一跳
    (三)python函数式编程
    跟托福说分手
    (二)python高级特性
    BitCoin工作原理
    反向传播的工作原理(深度学习第三章)
    1.22计划
    梯度下降——神经网络如何学习?(深度学习第二章)
    什么是神经网络 (深度学习第一章)?
  • 原文地址:https://www.cnblogs.com/littlehb/p/15094628.html
Copyright © 2020-2023  润新知