码迷,mamicode.com
首页 > 其他好文 > 详细

求子集 递归加回溯

时间:2019-02-02 19:17:47      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:closed   opened   using   pre   输出   表示   iostream   int   元素   

题目描述:

请编写一个递归函数,用来输出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

求子集 递归加回溯

标签:closed   opened   using   pre   输出   表示   iostream   int   元素   

原文地址:https://www.cnblogs.com/helloworld2019/p/10348845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!