写一个递归函数,用来输出n个元素的所有子集。
来源:互联网 发布:网络电子游艺坑人 编辑:程序博客网 时间:2024/06/04 20:14
题目描述:
试编写一个递归函数,用来输出n个元素的所有子集。例如,三个元素{a,b,c}的所有子集是:{} (空集) , {a} , {b} , {c} , {a,b} , {a,c} , {b,c} , {a,b,c}。
问题分析:
既然是求子集,我们可以采用对其标记的思路,“1”表示输出,“0”表示不输出。(全为“1”则代表该子集全集,全为“0”则代表该子集为空集)
所以我们遍历所有元素,代码如下:
#include <iostream>
#include "Header.h"
using namespace std;
template<typenameT>
#include "Header.h"
using namespace std;
template<typenameT>
void f(T *a,int *mark,int n,int i)
{//a为集合元素,mark为标记数组,n为起点,i为元素个数
if(n==i)
{
cout<<"{";
for(intk=0;k<i;k++)
{
if(mark[k]==1)
cout<<a[k];
}
cout<<"}"<<endl;
{
cout<<"{";
for(intk=0;k<i;k++)
{
if(mark[k]==1)
cout<<a[k];
cout<<"}"<<endl;
return ;
}
mark[n]=0;
f(a,mark,n+1,i);
mark[n]=1;
f(a,mark,n+1,i);
}
int main()
{
int mark[3];
char a[3]={'a','b','c'};
f(a,mark,0,3);
{
int mark[3];
char a[3]={'a','b','c'};
f(a,mark,0,3);
}
编译结果如下:
{}
{c}
{b}
{bc}
{a}
{ac}
{ab}
{abc}
用图示更清晰
mark[n]=0;
f(a,mark,n+1,i);
mark[n]=1;
f(a,mark,n+1,i);
这是《数据结构与算法应用》中的一道课后题 作者的标准答案:http://www.mhhe.com/engcs/compsci/sahni/c1/E5.HTM
1 0
- 写一个递归函数,用来输出n个元素的所有子集。
- 试编写一个递归函数,用来输出n 个元素的所有子集。
- 编写一个函数,用来输出n 个元素的所有子集
- 使用递归函数,输出n个元素的所有子集
- 使用递归函数,输出n个元素的所有子集
- 请编写一个递归函数,用来输出n个元素的所有子集。例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}.
- 《数据结构、算法与应用》5.(递归输出n个元素的所有子集)
- 非递归求n个元素的所有子集
- C++递归求解N个元素的所有子集
- n个元素的所有子集(递归+非递归 +不去重)
- 有一个集合A,它又n个元素,请用回溯法输出它所有的子集。
- 递归实现输出n个整数的全排列和所有子集
- hdu 2062 输出第几个子集的所有元素
- 递归-N个不相同的元素,输出所有可能的排列
- 求m个元素集合中n个元素的所有子集(C/OC)
- 列出所有K个元素的子集
- 递归生成n个元素的所有排列方式
- 递归算法生成n个元素的所有排列
- 搭建sbt
- 欢迎使用CSDN-markdown编辑器
- Lin总线应用层代码
- 单片机 时间周期、机器周期、指令周期详解
- 【BZOJ4104】【Thusc2015】解密运算
- 写一个递归函数,用来输出n个元素的所有子集。
- 日志审计-apache攻击日志分析
- SoftReference
- 解决:The proxy server received an invalid response from an upstream server
- XStream解析xml数据
- android MVP 实践笔记
- MySql避免重复插入记录
- 银行不良资产问题日益严重,政府需挑选出来:辛哈
- sybase服务器启动时报错:无法启动服务器,错误1053:服务没有及时相应启动或控制请求