AcWing 94. 递归实现排列型枚举
原题链接
简单
作者:
五道口预备技术员
,
2021-03-17 13:28:33
,
所有人可见
,
阅读 286
#include <iostream>
using namespace std;;
const int N = 11;
int n;
int order[N];//按顺序依次记录被选择的整数
bool chosen[N];//标记被选择的整数
void calc(int x)
{
if(x == n + 1) //问题边界
{
for(int i = 1; i <= n; i ++)
printf("%d ", order[i]);
puts("");
return ;
}
//在每次递归中,每一个可用的数作为数列的下一个数,
//求解“把剩下的 n - 1个整数按照任意次序排列”这个规模更小的子问题
for(int i = 1; i <= n; i ++)
{
if(chosen[i]) continue;
order[x] = i;
chosen[i] = 1;
calc(x + 1);
chosen[i] = 0;
// order[x] = 0;
}
}
int main()
{
cin >> n;
calc(1);
}