递归实现排列型枚举

发布时间 2023-03-22 21:13:49作者: 鹏G

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 10;
int n;//题目规模
bool st[N];//定义一个状态数组,下标表示当前数字,0值表示当前数字有没有被选过
int arr[N];//存放答案数列
void dfs(int x)//当前位置的枚举型搜索
{
if (x > n) {//边界条件如果x位置比问题规模还大就可以打印返回
for (int i = 1; i <= n; i++)
{
if (i != 1) { cout << ' '; }
printf("%d", arr[i]);
}
printf("\n");
return;
}
for (int i = 1; i <= n; i++)
{
if (!st[i]) {//用于判断当前枚举数字有没有被使用过
st[i] = true;
arr[x] = i;
dfs(x + 1);
//回溯
st[i] = false;
arr[x] = 0;
}
}
}
int main()
{
cin >> n;
dfs(1);
return 0;
}