问题描述:有一个含n个整数的数组a,所有元素均不相同,求其所有元素的全排列。例如,a[] = {1,2,3}
#include<stdio.h>
void swap(int &x, int &y){ // 交换x,y
int tmp = x;
x = y;
y = tmp;
}
void dispasolution(int a[], int n){ // 输出一个解
printf("(");
for(int i = 0; i < n-1; i++)
printf("%d,", a[i]);
printf("%d)", a[n-1]);
}
void dfs(int a[], int n, int i){ // 求a[0..n-1]的全排列
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]; 恢复
}
}
}
int main(){
int a[] = {1,2,3};
int n = sizeof(a)/sizeof(a[0]);
printf("a的全排列\n");
dfs(a,n,0);
printf("\n");
return 0;
}
运行结果