您的位置:首页 > 其它

生成子集

2012-05-24 16:52 204 查看
#include<iostream>
using namespace std;

int visited[101];
//arry表示求子集的数组
//cur表示搜索当前位置
//n表示数组元素个数
void DFS(int *arry, int cur, int n)//字典序
{
for(int i=0; i<cur; i++)
if(visited[i])
cout<<arry[i]<<" ";
if( cur != 0)
cout<<endl;

if( cur>=n )
return;
for(int i=cur; i<n; i++)
{
if( !visited[i] )
{
visited[i]=1;
DFS(arry, i+1, n);
visited[i]=0;
}
}
}
//arry表示求子集的数组
//cur表示搜索当前位置
//n表示数组元素个数
//num表示此次生成子集的元素个数
void DFS1(int *arry, int cur, int num, int n)//按子集元素个数
{
if( num<=0)
{
for(int i=0; i<cur; i++)
if(visited[i])
cout<<arry[i]<<" ";
cout<<endl;
return;
}

for(int i=cur; i<n; i++)
{
if( !visited[i] )
{
visited[i]=1;
DFS1(arry, i+1, num-1, n);
visited[i]=0;
}
}
}

int main()
{
int n;
int arry[101];

while( cin>>n )
{
coun = 0;
memset(visited, 0, sizeof(visited));
for(int i=0; i<n; i++)
cin>>arry[i];
//按字典序生成
cout<<"按字典序生成:"<<endl;
DFS(arry, 0, n);
cout<<endl;
//按子集元素个数
cout<<"按子集元素个数: "<<endl;
for(int i=1; i<=n; i++)
DFS1(arry, 0, i, n);
cout<<endl;
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: