zoukankan      html  css  js  c++  java
  • 94.递归实现排列型枚举

    原题链接:94. 递归实现排列型枚举


    解题思路:

    该问题也称全排列问题,所有可能的方案总数有n!种。在这里,递归需要求解的问题是“把指定的n个整数按照任意次序排列”,在每次递归中,我们尝试把每个可用的数作为数列中的下一个数,求解“把剩余的n-1个整数按照任意次序排列”这个规模更小的子问题

    样例代码:

    #include<bits/stdc++.h>
    using namespace std;
    int order[20];      //按顺序依次记录被选择的整数
    bool chosen[20];      //标记被选择的整数
    void calc(int k,int n)
    {
        if(k==n+1)      //问题边界
        {
            for(int i=1;i<=n;i++)
                printf("%d ",order[i]);
            puts("");
            return;
        }
        for(int i=1;i<=n;i++)
        {
            if(chosen[i])
                continue;
            order[k]=i;
            chosen[i]=1;
            calc(k+1,n);
            chosen[i]=0;
            order[k]=0;      //这一行可以省略
        }
    }
    int main()
    {
        int n;
        cin>>n;
        calc(1,n);      //主函数中的调用入口
        return 0;
    }
    
  • 相关阅读:
    二维数组111
    基础笔记
    排序
    折半查找法2
    数组 最小值
    数组 求偶数
    数组 找下标
    数组
    阶乘与9 99 999 9999 99999...
    打印三角形
  • 原文地址:https://www.cnblogs.com/hnkjdx-ssf/p/14155905.html
Copyright © 2011-2022 走看看