递归实现全排列详解
如图所示,核心思想,我们可以先输出以1开头的全排列,如何我们在输出以2开头的全排列,以此类推我们输出以n开头的全排列,
例如:实现全排列,用递归:
#include <iostream>
const int maxn = 11;
int n, p[maxn], hashTable[maxn] = {flase};
void generateP(int index) { //index代表的是递归层数
if(index == n + 1){
for( int i = 1;i <= n;i++ ) {
cout<<p[i]<<" ";
}
cout<<endl;
return;
}//以上为第一部分,以下为第二部分
for( int x = 1; x <= n; x++){
if(hashTable[x] == false){
p[index] = x;
hashTable[x] = true;
generatep(index + 1);
hashTable[x] = false;
}
}
}
using namespace std;
int main(){
n = 2;
generatep(1);
return 0;
}
解释: