递归实现排列、组合
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=100;
int arr[MAXN],n;
void pailie(int i) {
if(i==3) {
for(int x=0; x<n; ++x)
printf("%d ",arr[x]);
printf("\n");
}
for(int x=i; x<n; ++x) {
swap(arr[x],arr[i]);
pailie(i+1);
swap(arr[x],arr[i]);
}
}
void zuhe(int index,int status[]) {
if(index==n) {
for(int i=0;i<n;++i){
if(status[i]!=0)
printf("%d ",arr[i]);
}
printf("\n");
return;
}
for(int i=0; i<=1; ++i) {
status[index]=i;
zuhe(index+1,status);
}
}
int main(void) {
n=3;
arr[0]=1;
arr[1]=2;
arr[2]=3;
int status[3]= {0};
pailie(0);
printf("\n");
zuhe(0,status);
return 0;
}
next_permutation实现排列
#include<cstdio>
#include<algorithm>
using namespace std;
int main(void) {
int n=3;
int arr[3]={1,2,3};
do{
for(int i=0;i<n;++i)
printf("%d ",arr[i]);
printf("\n");
}while(next_permutation(arr,arr+n));
return 0;
}