zoukankan      html  css  js  c++  java
  • 子集生成-增量构造法||位向量法

    #include<bits/stdc++.h>
    using namespace std;
    int arr[25];
    void print_subset(int n,int* A,int cur)
    {
        int i;
        for(i=0;i<cur;i++) printf("%d ",arr[A[i]]);
        puts("");int s;
        if(cur==0) s=0;
        else s=A[i-1]+1;
        //相当于int s=cur?A[cur-1]+1:0;
        //当cur=0的时候,因为这是第一次进入函数,所以选取集合下标为0即可
    
        for(int i=s;i<n;i++)
        {
            A[cur]=i;
            print_subset(n,A,cur+1);
        }
        //然后就是从当前最小的还未选择过的下标作为下一个下标集合的首元素开始选取
        //直到n-1的下标位置,每一次选取首下标之后都开始递归
    }
    
    int main()
    {
        int n,A[25];//数组A辅助构造,其值为升序序列的下标,注意是从0开始
        for(int i=0;i<25;i++) A[i]=i;
        scanf("%d",&n);
        for(int i=0; i<n; i++) arr[i] = i+1;//数组arr为1-n的值
        print_subset(n,A,0);
    
        return 0;
    }

     位向量法:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    void print_subset(int n,int* B,int cur)
    {
        if(cur==n)//当判断到了最后一个元素是否存在后
        {
            for(int i=0;i<n;i++)
            {
                if(B[i]) printf("%d ",i);
            }
            puts("");
            return;
        }
        B[cur]=1;//选择第cur个元素
        print_subset(n,B,cur+1);
        B[cur]=0;//不选择
        print_subset(n,B,cur+1);
    }
    
    int main()
    {
        int n;
        cin>>n;
        int B[100];
        print_subset(n,B,0);
        return 0;
    }
  • 相关阅读:
    MySQL表的完整性约束
    MySQL支持的数据类型
    MySQL表操作
    MySQL存储引擎概述
    onblur和onkeyup事件
    Web控件LinkButton
    jQuery防止中文乱码
    jQuery 动态添加、删除css样式
    VS2012生成Web时报未能找到元数据文件xxx.dll
    单击EasyUI的datagrid行时不选中
  • 原文地址:https://www.cnblogs.com/Fy1999/p/8575977.html
Copyright © 2011-2022 走看看