求出一个整数组成的集合的所有子集的算法
用伪码做答 问题点数:50、回复次数:8Top
1 楼pcboyxhy(-273.15℃)回复于 2005-02-04 20:06:09 得分 50
#include<iostream>
using namespace std;
int str[]={1,2,3,4,5,6,7};
bool bo[7];
long xnum=0;
int print(int i)
{
if(i>=7)
{
int j,k=0;
++xnum;
cout<<"No."<<xnum<<'=';
cout<<"{";
for(j=0; j<7; j++)
if(bo[j])
{
if(k)
cout<<',';
cout<<str[j];
++k;
}
cout<<"}"<<endl;
return 0;
}
else
{
bo[i]=true;
print(i+1);
bo[i]=false;
print(i+1);
}
return 0;
}
int main( int argc, char * argv[] )
{
print(0);
return 0;
}
/*
int print(int i)
{
if(i>=7) i>=7 就输出结果中的一个
{
int j,k=0;
++xnum;
cout<<"No."<<xnum<<'=';
cout<<"{";
for(j=0; j<7; j++)
if(bo[j])
{
if(k)
cout<<',';
cout<<str[j];
++k;
}
cout<<"}"<<endl;
return 0;
}
else i<7就继续下一个数
{
bo[i]=true; 第i个元素放入集合中并继续
print(i+1);
bo[i]=false; 第i个元素不放入集合中
print(i+1);
}
return 0;
}
*/Top
2 楼pcboyxhy(-273.15℃)回复于 2005-02-04 20:07:22 得分 0
bool bo[7]; //bo[i]用来标志第i个元素是否放入子集
Top
3 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-02-04 20:08:11 得分 0
用伪码吧,要不然我会看得头痛Top
4 楼pcboyxhy(-273.15℃)回复于 2005-02-04 20:14:32 得分 0
从数组第一个元素开始,依次执行如下操作。
判断:如果超出数组的元素个数了,就输出结果并回溯
1.将当前元素标记为放入子集,递规调用进行下一个元素的处理。
2.将当前元素标记为不放入子集,递规调用进行下一个元素的处理。(此时已经回溯了 这个当前元素和1里面的是一样的)
Top
5 楼oo(为了名副其实,努力学习oo技术ing)回复于 2005-02-04 20:35:28 得分 0
夏雪?Top
6 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-02-04 21:01:58 得分 0
夏雪
你认识?Top
7 楼oo(为了名副其实,努力学习oo技术ing)回复于 2005-02-04 21:19:41 得分 0
我认识一个叫夏雪的Top
8 楼sms88(白板http://shop34112882.taobao.com)回复于 2005-02-07 14:22:51 得分 0
那你是哪个学校的?Top




