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;
}
原文地址:https://www.cnblogs.com/hnkjdx-ssf/p/14155905.html