思路:使用dfs进行枚举
对于每个枚举节点,他只继续向下搜索比他已经包含的最大元素更大的元素
#include <bits/stdc++.h>
using namespace std;
void subset(int *a,int psz,int asz ,int las,int *p)
{
for(int i=las+1;i<psz;i++)
{
a[asz+1]=p[i];
for(int j=0;j<asz+2;j++)cout<<a[j]<<" ";cout<<endl;
subset(a,psz,asz+1,i,p);
}
}
int main()
{
int p[10],a[10],psz;
while(cin>>psz)
{
for(int i=0;i<psz;i++)cin>>p[i];
cout<<"---"<<endl;
subset(a,psz,-1,-1,p);
}
return 0;
}
本文介绍了一种使用深度优先搜索(DFS)实现的枚举子集算法。该算法通过递归方式生成输入集合的所有可能子集,并确保每个子集内的元素递增。代码示例展示了如何枚举特定大小的子集并打印出来。
47万+

被折叠的 条评论
为什么被折叠?



