• 啊哈算法_全排列


    //小哈面前有三个箱子,手上有1,2,3三张牌,规定能放小牌就放小牌,小哈放完最后一个箱子后,最后在箱子的牌能有几种排列?
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    int a[10],book[10],n;
    void dfs(int step) //step表示站在第几个盒子面前
    {
        int i;
        if(step==n+1)
        {
            for(i=1;i<=n;i++)
                cout<<a[i];
            cout<<endl;
                  return ;//返回之前一次调用dfs函数的地方
        }
        //此时站在第step个盒子面前,应该放那张牌呢?
        //按照1、2、3、、、、n的顺序一一尝试
        for(i=1;i<=n;i++)
        {
            if(book[i]==0)
            {
                a[step]=i;
                book[i]=1;
                //第step个盒子已经放好扑克牌,接下来需要走到下一个盒子面前
                dfs(step+1);
                book[i]=0;//关键收回纸牌
            }
        }
        return ;
    }
    
    int main()
    {
        scanf("%d",&n);
        dfs(1);
    
        return 0;
    }
    


    深度优先搜索的基本模型

                             void dfs(int step)

                         {

       判断边界

     尝试每一种可能     for(i=1;i<=n;i++){

          继续下一步         dfs(step+1);

                                       }

                                       返回

                               }

           

  • 相关阅读:
    偶数求和
    POJ2002Squares
    学习笔记之ulimit
    LeetCode 345. Reverse Vowels of a String
    LeetCode 343. Integer Break
    LeetCode 292. Nim Game
    LeetCode 338. Counting Bits
    LeetCode 344. Reverse String
    [ZZ]良好的编码习惯
    学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
  • 原文地址:https://www.cnblogs.com/mingrigongchang/p/6246269.html
Copyright © 2020-2023  润新知