全排列问题
#include <iostream>
#include <cstring>
using namespace std;
const int N=10+5; //最多10个数的全排列
int n; //n个数的全排列
int a[N]; //N个盒子,编号为1-n
bool used[N]; //标记n张牌是不是在手中,在手中就是false,不在手中就是true
//第step个盒子放扑克牌
void dfs(int step);
int main()
{
// freopen("data.out","w",stdout);
while(cin>>n){
memset(a,false,sizeof(a));//初始化n张牌的状态
dfs(1);
}
return 0;
}
void dfs(int step)
{
//边界条件,递归出口
if(step==n+1){
//输出n个盒子的所有牌
for(int i=1;i<=n;i++)
cout<<char(a[i]+'A'-1);
cout<<endl;
return;
}
//现在走到第step个盒子,需要放哪张牌
//枚举n张牌
for(int i=1;i<=n;i++){
if(used[i]==false){ //如果第i张牌在手中
a[step]=i; //第i张牌放入第step个盒子
used[i]=true; //第i张牌不在手中
dfs(step+1); //走到第step+1个盒子,继续放牌
used[i]=false; //回溯算法,再取回第i张牌
}
}
}