白皮书看到的,顺手抄了一遍。
用枚举递归实现的,也可以声明一个足够大的数组A,然后调用print_permutation函数按字典序输出;
1 #include"iostream" 2 using namespace std; 3 void print_permutation(int n,int *A,int cur){ 4 if(cur==n){ //递归边界 5 for(int i=0;i<n;i++) 6 cout<<A[i]; 7 cout<<" "; 8 } 9 else for(int i=1;i<=n;i++){ 10 int ok=1; 11 for(int j=0;j<cur;j++){ //如果i已经在数组出现,不能再选 12 if(A[j]==i){ 13 ok=0; 14 break; 15 } 16 } 17 if(ok!=0){ 18 A[cur]=i; 19 print_permutation(n,A,cur+1); 20 } 21 } 22 } 23 int main(){ 24 int n,a[100],cur; 25 cin>>n; 26 cur=0; 27 print_permutation(n,a,cur); 28 }