#include <bits/stdc++.h>
using namespace std;
const int maxn =11;
//p为当前排列,hashTable记录整数x是否已经在p中
int n,p[maxn],hashTable[maxn]={false};
//当前处理排列的低index号位
void generateP(int index){
if(index==n+1){ //递归边界
for(int i=1;i<=n;i++){
printf("%d", p[i]); //输出
}
printf("\n");
return;
}
for(int x=1;x<=n;x++){ //枚举1~n,试图将x填入p[index]
if(hashTable[x]==false){ //如果x不在p[0]~p[index-1]中
p[index] =x; //令p的第index位为x,即将x加入当前排列
hashTable[x] = true; //记x已在p中
generateP(index+1); //处理第index+1位
hashTable[x] = false; //已处理完p[index]为x的子问题,还原状态
}
}
}
int main()
{
n=3;
generateP(1);
return 0;
}
在理解过程中,对于index和x的认知不够,使得自己怎么都理解不了,使用codeblocks的debug让我有了一丝丝的理解。