两个方法
permutations():用来生成数组array中所有元素的全排列;
subset():用来生成数组array中所有元素的子集,包含空集。
代码
/*
1、输出n个整数的全排列
2、输出n个整数的所有子集
*/
#include<iostream>
using namespace std;
void swap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
//1、输出n个整数的全排列
void permutations(int array[], int k, int m){
if(k == m){
for(int i=0; i<=m; i++){
cout <<array[i]<<" ";
}
cout <<endl;
}
else{
for(int i=k; i<=m; i++){
swap(array[k], array[i]);
permutations(array, k+1, m);
swap(array[k], array[i]);
}
}
}
//2、输出n个整数的所有子集
void subset(int *array, int *tag, int k, int n){
if(k == n+1){
cout <<"{"<<" ";
for(int i=0; i<=n; i++){
if(tag[i] == 1){
cout <<array[i]<<",";
}
}
cout <<"}"<<endl;
}
else{
tag[k] = 0;
subset(array, tag, k+1, n);
tag[k] = 1;
subset(array, tag, k+1, n);
}
}
//测试
int main(){
int arr1[3] = {1, 2, 3};
int arr2[2] = {3, 4};
int arr3[4] = {5, 6, 7, 8};
int len1 = sizeof(arr1)/sizeof(arr1[0]);
int len2 = sizeof(arr2)/sizeof(arr2[0]);
int len3 = sizeof(arr3)/sizeof(arr3[0]);
//全排列
permutations(arr1, 0, len1-1);
permutations(arr2, 0, len2-1);
permutations(arr3, 0, len3-1);
//子集
int flag[len3+1]; //声明并初始化标记数组
for(int i=0; i<len3+1; i++){
flag[i] = -1;
}
subset(arr3, flag, 0, len3-1);
return 0;
}