首先来看一下关于全排列的思想,很明显就是一个递归问题,后面的数是前面没有出现过的数即可。
具体代码如下:
#include<iostream>
using namespace std;
const int maxn=11;
int n,P[maxn],hashTable[maxn]={false};//用P去存数字,hahTable去检验一个数字是否已经出现过;
void generateP(int index)
{
if(index == n+1){ //递归边界,已经处理好1-n
for(int i=1;i<=n;i++){
cout<<P[i]; //输出即可
}
cout<<endl;
return;
}
for(int x=1;x<=n;x++){
if(hashTable[x] == false){ //若是false,则代表x还没用
P[index]=x;
hashTable[x]=true;
generateP(index+1); //最精华的一步,递归下一位;
hashTable[x] = false;//最后将下次要用的全部清掉,方便使用;
}
}
}
int main()
{
n=3;
generateP(1);
return 0;
}
打印之后是一到三的全排列,若有其他需要可在主函数直接更改;