输出3的全排列
代码
#include<stdio.h>
const int maxn = 11;
int n, P[maxn], hashTable[maxn] = {
false};//P:当前排列,hashTable记录x是否已经在P中
void generateP(int index) {
//当前处理排列的第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] == false) {
P[index] = x;//将x加入当前排列
hashTable[x] = true;
generateP(index + 1);//处理排列的第index+1位
hashTable[x] = false;//已经处理完P[index]为x的子问题,还原状态
}
}
}
int main() {
n = 3;//欲输出1~3的全排列
generateP(1);//从P[1]开始填
return 0;
}