• 求一个全排列函数: 如p([1,2,3])输出:[123],[132],[213],[231],[312],[321]. 求一个组合函数 如p([1,2,3])输出:[1],[2],[3],[1,2],[2,3],[1,3],[1,2,3]


    深度搜索的代码:

    #include<stdio.h>
    #include<string.h>
    const int Max = 1010;
    int n;
    int a[Max];
    bool b[Max];
    void Dfs(int num)
    {
        if(num==n)
        {
            for(int i=0;i<n;i++)
                printf("%d",a[i]);
            printf("
    ");
        }
        else
        {
            for(int i=1;i<=n;i++)
            if(!b[i])
            {
                b[i]=true;
                a[num]=i;
                Dfs(num+1);
                b[i]=false;
            }
        }
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            memset(b,false,sizeof(b));
            Dfs(0);
        }
        return 0;
    }
    View Code

    采用字典序的排序的方法 :

    http://www.cnblogs.com/biyeymyhjob/archive/2012/07/13/2589738.html

    思路:设一个数组a,数组a中的数必须是0和1当中的一个,将待组合数每一个数关联到数组中,接着按照二进制的规则,对数组a构建成的二进制数一步一步加1,在这个过程中,数组a每次构建一个二进制的数,对应数组为1的待组合数集合当中的数立即输出,构成一次组合,依次类推。

    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int n,bit;
        int i,j,m;
        while(scanf("%d",&n)!=EOF)
        {
            m=pow(2,n);
            for(i=1;i<m;i++)
            {
                j=i;
                bit=1;
                while(j)
                {
                    if(j%2)printf("%d",bit);
                    j/=2;
                    bit++;
                }
                printf("
    ");
            }
        }
        return 0;
    }
    View Code

    采用字典序的排序的方法 :

    http://www.cnblogs.com/biyeymyhjob/archive/2012/07/13/2589738.html

  • 相关阅读:
    分库分表的几种常见形式以及可能遇到的难
    一次非常有意思的 SQL 优化经历
    JavaScript 中 4 种常见的内存泄露陷阱
    专治前端焦虑的学习方案
    专治前端焦虑的学习方案
    [计算机视觉]图像直方图与直方图均衡化
    vector.erase用法注意事项
    [OPENCV]cvHoughLines2使用说明
    MarkDown教程
    GitHub用法
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3648859.html
Copyright © 2020-2023  润新知