• [递归入门] 全排列


    题目描述: 排列与组合是常用的数学方法。先给一个正整数 ( 1 < = n < = 10 ) 例如n=3,所有组合,并且按字典序输出: 
    1 2 3 
    1 3 2 
    2 1 3 
    2 3 1 
    3 1 2 
    3 2 1 

    分析:今天看书看到了递归入门,做到了这一道题目,记录一下。在C++的库函数中,提供了函数next_permutation(),来获得一个数组的各种组合,这个题目的第一种解法就是使用这个函数就可以很简单的完成。除此之外,这里中这道题目进行了简单的递归练习,就是用深度遍历算法来求出所有的排列组合。递归的做法是借助深度遍历算法,递归的边界是已经选择了n个数。

    //way 1:
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    using namespace std;
    int a[15] ;
    
    int main()
    {
        for(int i=0;i<15;i++)
        {
            a[i]=i+1;
        }
        int n;
        scanf("%d",&n);
        do
        {
            for(int i=0;i<n;i++)
            {
                if(i>0){
                    printf(" ");
                }
                printf("%d",a[i]);
            }
            printf("
    ");
        }while(next_permutation(a,a+n));
        return 0;
    }
    //DFS递归实现 
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    using namespace std;
    vector<int> ans;
    int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    int flag[15]={0};
    int n;
    
    void DFS(int num)
    {
        if(num==n)//已经选择了n个数则输出
        {
            for(int i=0;i<n;i++)
            {
                if(i>0)
                {
                    printf(" ");
                }
                printf("%d",ans[i]);
            }
            printf("
    ");
            return ;
        }
        for(int i=0;i<n;i++)
        {
            if(flag[i]==0)
            {
                ans.push_back(a[i]);
                flag[i]=1;
                DFS(num+1);
           //退出递归后记得将刚刚插入的数弹出 flag[i]=0; ans.pop_back(); } } } int main() { scanf("%d",&n); DFS(0); return 0; }
  • 相关阅读:
    OpenCV——IplImage
    OpenCV——常用函数查询
    OpenCV——Sobel和拉普拉斯变换
    OpenCV——CvSeq动态结构序列
    OpenCV——人脸检测
    Java—Integer类
    Java—NumberFormat与DecimalFormat类
    sql事务机制
    存储过程
    java中的抽象类和接口
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/6427767.html
Copyright © 2020-2023  润新知