#include<stdio.h>
const int maxn=11;
//p为当前排列,hashTable记录整数x是否已经在p中
int n,p[maxn],hashTable[maxn]={false};
//当前处理排列的第index号位
void generatep(int index){
if(index==n+1){ //递归边界,已处理完排列的1-n位
for(int i=1;i<=n;i++)
printf("%d",p[i]);
printf("\n");
return;
}
for(int x=1;x<=n;x++){
if(!hashTable[x]){
p[index]=x;
hashTable[x]=true; //记x已在p中
generatep(index+1); //处理排列的第index+1号位
hashTable[x]=false; //已处理好p[index]为x的子问题,还原状态
}
}
}
int main(){
n=5; //1-n的全排列
generatep(1);
return 0;
}