子集生成法

生成集合的子集的时候,经常使用两种方式位向量法和二进制法

位向量法生成子集:

/*子集生成位向量法*/
#include
int B[20];
void print_subset(int n,int *B,int cur)
{
    if(cur == n) {
        for(int i=0;i

二进制法生成子集:

/*算法思想 
	例如求4个元素 3 2 1 0 的子集。
	那么用二进制的1代表每一位是否选中。
十进制	二进制 
0	 	0000  代表空集
1	 	0001  代表{0}
2	 	0010  代表{1}
3	 	0011  代表{0,1}
4	 	0100  代表{2}
		 ...
15	 	1110  代表{3,2,1}
16	 	1111  代表{3,2,1,0} 

如果n很大的话可以用字符串模拟二进制 
*/
# include 
# include 
using namespace std;
//二进制法求子集 
void print_subset(int n,int s){
	for(int i=0;i

你可能感兴趣的:(算法)