AcWing 823. 排列
原题链接
简单
作者:
枫哥
,
2024-10-31 17:54:51
,
所有人可见
,
阅读 1
#include <iostream>
using namespace std;
//运行错误:调试,追根溯源
int cnt = 0;
int N = 10;
int n;
void p(int u,int nums[],bool st[]){
if (u > n){ // 递归截止条件。处理完索引n的赋值操作,可以输出数组了
for (int i = 1;i <= n;i++) cout << nums[i] << ' ';
cout << endl;
}
else{
for (int i = 1;i <= n;i++){
if (st[i] == 0){
st[i] = true; // 设置true表示该位置的数字被使用过了
nums[u] = i; // 将布尔数组的索引代表的数字赋值给数组
p(u+1,nums,st); // 递归表达式子,进入下一层递归
st[i] = false; // 恢复现场:防止返回递归上一层后,未被使用的数字使用不了
}
}
}
}
int main(){
cin >> n;
int nums[N];
bool st[N] = {0}; // 布尔数组,0 1表示索引代表的数字是否被使用过
p(1,nums,st);
return 0;
}