任意の集合のサブセット生成--C++実装

1167 ワード

タイトルの説明:
同じ要素を含まないコレクションが任意に与えられ、そのコレクションのすべてのサブセットを印刷する必要があります.
説明を入力:
最初の行には、セットの要素の数を入力します.2行目には、セットのすべての要素を入力します.
出力の説明:
このセットのすべてのサブセットをディクショナリ順に小から大に出力します.
サンプル入力:
5 1 6 5 3 2
サンプル出力:1 1 2 1 2 3 1 3 3 5 1 2 3 5 3 5 6 1 2 3 6 1 2 5 1 2 5 5 6 1 2 6 1 3 1 3 5 1 3 5 6 1 3 6 6 6 6 6 1 6 6 6 2 3 3 5 6 6 6 6 6 6 6 6 6 2 3 3 6 6 2 5 6 6 6 6 2 5 6 6 3 3 5 5 6 6 6 6 6 6 6 6
問題解決の考え方:
p(入力セット)で条件に合致する要素をrslt(出力セット)に入れるたびに、条件に合致する要素はrsltのいずれかの要素よりも大きいことを意味する.次に、再帰的にサブセットを構築します.具体的な実装はコードを参照してください.

#include 
#include 
using namespace std;
void print_subset(int n,int p[],int rslt[],int cur)
{
	for(int i=0;is)
			{
				rslt[cur]=p[i];
				print_subset(n,p,rslt,cur+1);//       
			}
		}
	}
}
int main()
{
	int n;cin>>n;
	int p[n];
	for(int i=0;i>p[i];
	int rslt[n]={0};
	sort(p,p+n);//              
	print_subset(n,p,rslt,0); 
}