例如a[]={1,2,3},得到的结果是(1,2,3)、(1,3,2)、(2,3,1)、(2、1、3)、(3,1,2)、(3,2,1)。
#include <iostream>
//求a[0...n-1]的全排列
void dfs(int a[], int n, int i);
//输出一个解
void dispasolution(int a[], int n);
//交换x,y
void swap(int &x, int &y);
int main(){
int a[] = {1,2,3};
int n = sizeof(a)/sizeof(a[0]);
printf("a的全排列\n");
dfs(a,n,0);
printf("\n");
}
void dfs(int a[], int n, int i) {
if(i>=n){ //递归出口
dispasolution(a,n);
} else{
for(int j=i;j<n;j++){
swap(a[i],a[j]); //交换a[i]与a[j]
dfs(a,n,i+1);
swap(a[i],a[j]); //交换a[i]与a[j]:恢复
}
}
}
void swap(int &x, int &y) {
int temp;
temp=x;
x=y;
y=temp;
}
void dispasolution(int a[], int n) {
printf("(");
for(int i=0;i<n-1;i++)
printf("%d,",a[i]);
printf("%d)\t",a[n]);
}