写一个递归函数,用来输出n个元素的所有子集。
2016-06-01 15:07
267 查看
题目描述:
试编写一个递归函数,用来输出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>
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;
return ;
}
mark
=0;
f(a,mark,n+1,i);
mark
=1;
f(a,mark,n+1,i);
}
int
main()
{
int
mark[3];
char
a[3]={'a','b','c'};
f(a,mark,0,3);
}
编译结果如下:
{}
{c}
{b}
{bc}
{a}
{ac}
{ab}
{abc}
用图示更清晰
mark
=0;
f(a,mark,n+1,i);
mark
=1;
f(a,mark,n+1,i);
这是《数据结构与算法应用》中的一道课后题
作者的标准答案:http://www.mhhe.com/engcs/compsci/sahni/c1/E5.HTM
相关文章推荐
- 单片机 时间周期、机器周期、指令周期详解
- Lin总线应用层代码
- Git清理本地缓存命令
- 欢迎使用CSDN-markdown编辑器
- android ontouch和onclick冲突处理
- 文章标题
- Java maven项目整合Redis
- Java中Date和Calender类的使用方法
- 浏览器内核控制Meta标签
- AWT,Panel入门,多框架,多Panel
- SpringMVC框架入门
- 数据库死锁那些事
- 自定义转场效果 presentViewController实现由左向右
- 278. First Bad Version
- 电脑卡顿的终极奥义
- 使用nslookup定位权威域名服务器得到权威应答
- Drupal Commerce alter checkout form and custom validate
- Java之反射机制
- Codeforces Round #352 (Div. 2) D. Robin Hood
- fszipx.exe