• C++DFS方法全排列


    前几天看纪磊的《啊哈!算法》一书,里面讲算法讲的特别通俗细致,真的是初中生都能读得懂的算法书(我大二才读:P)。这段代码很适合初学算法的同学。

    #include<iostream>
    using namespace std;
    int a[10], book[10], n;
    //全排列算法,运用深度优先搜索dfs
    void dfs(int step)
    {
         int i;
         if (step == n + 1)   //如果站在第n+1个箱子前,则表示前n个箱子已经排列好
         {
              for (i = 1; i <= n; i++)   //输出一种排列(1-n号箱子中的扑克牌编号)
              {
                   cout << a[i];
              }
              cout << endl;
              return;    //返回之前的一步(最近一次调用dfs函数的地方)
    
         }
         //当站在第step个箱子面前应该放什么牌
         //依次实验1、2、3、4.....是否可行
         for (i = 1; i <= n; i++)
         {
              //判断扑克牌i是否还在手上
              if (book[i] == 0)
              {
                   a[step] = i;  //将第i号扑克牌放到第step个箱子中
                   book[i] = 1;  //将book[i]设置为1则表示第i张扑克牌不在手中
    
                   dfs(step + 1);    //第step个箱子放好后,走到下一个箱子
                   book[i] = 0;     //同时收回刚才尝试的扑克牌
    
              }
         }
         return;
    }
    int main(){
         cin >> n;
         dfs(1);
         return 0;
    
    }
  • 相关阅读:
    十五、MySQL DELETE 语句
    十三、MySQL WHERE 子句
    十四、MySQL UPDATE 查询
    十一、MySQL 插入数据
    十二、MySQL 查询数据
    十、MySQL 删除数据表
    九、MySQL 创建数据表
    八、MySQL 数据类型
    七、MySQL 选择数据库
    六、MySQL 删除数据库
  • 原文地址:https://www.cnblogs.com/rever/p/4572761.html
Copyright © 2020-2023  润新知