//递归
#include <cstdio>
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++){ //枚举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;//欲输出1~3的全排列
generateP(1); //先从P[1]开始排
return 0;
}
全排列问题(递归法)
于 2023-03-14 20:03:50 首次发布