zoukankan      html  css  js  c++  java
  • 求子集 递归加回溯

    题目描述:

    请编写一个递归函数,用来输出n个元素的所有子集。例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}.

    解题思路:

    根据子集的定义,集合中的每一个元素在子集中都有两种状态:‘1’表示出现,'0'表示不出现;如果所有的元素都不出现,则该子集是空集,如果所有的元素都出现,则该子集是全集。

    我们定义一个标记数组tag,用于记录集合中对应的元素是否出现,每层遍历对应集合中的每个元素,都有出现(为‘1’)和不出现(为‘0’)两种可能,一直遍历到所有的元素的可能都标记完,然后根据数组函数输出结果。

    //求子集  
    #include <iostream>  
    using namespace std;  
    void build(char *str,int *tag,int n)  
    {  
        if(n==5)  
        {  
            cout<<"{";  
            for(int i=0;i<5;i++)  
                if(tag[i]==1)  
                    cout<<str[i];  
            cout<<"}"<<endl;  
            return;  
        }  
        tag[n] = 0;  
        build(str,tag,n+1);  
        tag[n] = 1;  
        build(str,tag,n+1);  
    }  
    int main()  
    {  
        char a[5]={'a','b','c','d','e'};  
        int tag[5];  
        build(a,tag,0);  
        return 0;  
    }  
    View Code

    参考:https://www.cnblogs.com/zhezh/p/3773305.html

  • 相关阅读:
    写一写这几天安卓开发遇到的坑
    安卓环境搭建
    正则表达式
    一段时间的总结
    路飞-登录页面
    路飞-腾讯云短信接口
    路飞-Redis
    路飞-git操作
    路飞-后台xadmin配置
    路飞-后台处理跨域问题
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10348845.html
Copyright © 2011-2022 走看看