递归求全排列
其实它是没有排序的全排列……
-
#include<iostream>
-
using namespace std;
-
-
#define N 30
-
-
/********************************
-
* 打印数组函数
-
********************************/
-
void printArray(int A[], int n){
-
for(int i=0; i<n; i++){
-
cout<<A[i]<<" ";
-
}
-
cout<<endl;
-
}
-
-
/********************************************
-
* 全排列算法
-
*
-
* 输入:数组A[],数组的元素个数n,
-
* 当前递归层次已完成排列的元素个数k(0<=k<n)
-
* 输出:数组A[]的全排列
-
********************************************/
-
void perm(int A[], int n, int k){
-
if(k==n-1){ // 已完成排列则打印
-
printArray(A,n);
-
}else{
-
for(int i=k; i<n ;i++){ // 生成后续的一系列排列
-
swap(A[i], A[k]);
-
perm(A, n, k+1);
-
swap(A[i], A[k]);
-
}
-
}
-
}
-
-
int main(){
-
int A[N], n;
-
-
cout<<"请输入数组的元素个数:";
-
cin>>n;
-
-
cout<<"请输入数组的元素:";
-
for(int i=0; i<n; i++){
-
cin>>A[i];
-
}
-
-
cout<<"数组的全排列是:"<<endl;
-
perm(A,n,0);
-
-
return 0;
-
}