题目:给定一个集合,求其子集。如{1,2,3},子集为(1,2,3),(1,2),(1,3),(1),(2,3),(2),(3),(空集)
思路:典型的分治法的思想。不过额外定义了一个与原数组相同长度的数组brr初始化全为0,通过修改brr中元素的值,最后根据brr的值来判断是否打印arr数组对应位置的元素,为0不打印,为1则打印。
代码实现:
void QiuZiJi(int arr[],int brr[],int i,int n)
{
if(i==n)
{
for(int j=0;j<n;++j)
{
if(brr[j])//对应位为1时,将其输出
{
cout<<arr[j]<<" ";
}
}
cout<<endl;
}
else
{
brr[i]=1;
QiuZiJi(arr,brr,i+1,n);//左边(向左分支走)
brr[i]=0;