连续数字的全排列问题见以下代码,
#include<stdio.h>
int n = 4; //几个数字的全排列
int P[10] = {0}; //存放当前排列顺序
bool hashTable[10] = {false}; //数字index是否被用
void generateP(int index){
if(index == n+1){
for(int i=1;i<=n;i++){
printf("%d", P[i]); //按顺序输出结果
}
printf("\n");
}
for(int x=1;x<=n;x++){
if(hashTable[x]==false){ //从1开始,数字x没有被用过,则尝试装入
P[index] = x; //装入x
hashTable[x] = true; //数字x已经被用了
generateP(index+1); //往下递归
hashTable[x] = false; //还原状态
}
}
}
int main(){
generateP(1);
return 0;
}
如果是字母的全排列问题,则可以将字母与数字一一进行对应(连续字母进行散列),然后输出即可,不再赘述。