原题链接: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;
}