幂集的每个元素是一个集合或者是一个空集。拿集合{A, B, C}来举例,这个集合的幂集为{ {A, B, C}, {A , B}, {A , C}, {B, C},{A}, {B}, {C}, {}}。可以看出分为3中状态:

空集

是集合中的一个元素组成的集合

是集合中的任意两个元素组成的集合

是集合中的三个元素组成的集合,就是它本身

下面用回溯递归的思想来实现求幂集的算法:

算法思想,集合中每个元素有两种状态,在幂集元素的集合中,不在集合中。可以用一颗二叉树形象的表示回溯遍历的过程

#include

using namespace std;

char *result;

char *element;

void OutputPowerSet(int len){ //输出幂集中的元素

cout<

int eln = 0;

for(int i = 0; i < len; i++){

if(result[i] != 0)

{

if(eln > 0)

cout<

else

cout<

eln++;

}

}

cout<

}

void PowerSet(int k,int n){

if(k > n)

{

OutputPowerSet(n);

}else{

result[k-1] = element[k-1]; //元素在幂集元素集合中

PowerSet(k+1,n);

result[k-1] = 0;//元素不在幂集元素集合中

PowerSet(k+1,n);

}

}

int main(){

int num;

cin>>num;//输出要求幂集的初始集合元素个数

element = new char[num];

result = new char[num];

int index = 0;

while(index < num){

cin>>element[index]; //输入集合元素,这里用字符代替

index++;

}

PowerSet(1,num);

}

C语言回溯算法求幂集,回溯求幂集算法相关推荐

  1. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...

  2. c语言tarjan算法,无向图求割点和割边——Tarjan算法

    无向图中求割点集和割边集--Tarjan算法 割点和割边 定义 在一个无向图中,如果删除了某个顶点及与之相连的所有边,产生了一更大连通分量的子图,这样的顶点被称为割点或关节点.对于一个图的所有割点的集 ...

  3. c语言有参有类最小公倍数,C语言求最大公约数和最小公倍数算法

    C 语言求最大公约数和最小公倍数算法 C 语言求最大公约数和最小公倍数可以说是C 语言编程学习中一个重点和难点,它常常作为计算机专业学生参加各种考试必须要把握的内容.其算法方面除常用的辗转相除法外.还 ...

  4. C语言求最大公约数GCD的算法(附完整源码)

    C语言求最大公约数GCD的算法 C语言求最大公约数GCD的算法完整源码(定义,实现,main函数测试) C语言求最大公约数GCD的算法完整源码(定义,实现,main函数测试) #include < ...

  5. 复化梯形公式求椭圆周长C语言,C语言编程解线性,非线性方程,龙贝格算法.docx

    C语言编程解线性,非线性方程,龙贝格算法 课程设计课程名称:数值计算B 设计题目:数值计算B课程设计学号:姓名:完成时间: 2015年10月27日题目一:非线性方程求根一.题目假设人口随时间和当时人口 ...

  6. 严蔚敏《数据结构》C语言版 第三章 算法3.4 表达式求值

    这个我是看到华为今年招聘的机试题的第三题. 输入一串算术表达式的字符串,把它的结果算出来. 1 //表达式求值(输入.输出和中间结果均只能是0-9)运算符仅限+-*/. 2 #include < ...

  7. 基于求导的快速exp()算法,exp()快速计算,exp导数算法,exp函数C语言实现

    基于求导的快速exp()算法 如果需要得到exp(x)的连续数列,那么常规方法需要一个一个数的运算,运算量会非常大.此时可以使用以下方法,得到连续的exp(x)数列. 我们知道的导数等于本身.设 求导 ...

  8. 0x08算法设计与分析复习(二):算法设计策略-回溯法2

    参考书籍:算法设计与分析--C++语言描述(第二版) 算法设计策略-回溯法 子集和数 问题描述 已知n个不同的正数wi(0≤i≤n−1)的集合,求该集合的所有满足条件的子集,使得每个子集中的正数之和等 ...

  9. LeetCode算法题2:求字符串b在字符串a中的起始下标

    文章目录 前言 一.题目描述 二.思路 1.朴素匹配 1.1Java直接实现 2.kmp模式匹配 总结 前言 本系列文章为leetCode刷题笔记,仅供参考. 一.题目描述 若字符串 a 包含字符串 ...

  10. 五大常用算法之四:回溯法

    http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741376.html 1.概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试 ...

最新文章

  1. 云原生的浪潮下,为什么运维人员适合学习Go语言?
  2. Android系统中设置TextView等的行间距
  3. Django的路由分发与名称空间
  4. 第六章 PX4-Sensors解析
  5. win10,配置环境变量时系统环境变量和用户环境变量的优先级
  6. 数据库应用系统——引言
  7. 智能交通助力城市道路行车提速15%
  8. 【论文】本周论文推荐(迁移学习、阅读理解、对话系统、图神经网络、对抗生成网络等)...
  9. java query dsl_java – QueryDsl – 具有字符串值的case表达式
  10. Atitit.软件gui按钮and面板---os区-----linux windows搜索文件 文件夹
  11. 移动互联应用技术和计算机网络技术,移动互联应用技术团队介绍
  12. python 前端开发_python和前端开发怎么抉择?
  13. Wireshark 使用教程
  14. 监控工具Zabbix之原理及部署
  15. js calendar / wannianli
  16. VueCLI和Vite
  17. 北京中医药大学22春《生物化学B》平时作业1【专职辅导答案】
  18. 算法设计与分析: 2-7 士兵站队问题
  19. Redis监控汇总一
  20. STM32入门开发--LED模块实现跑马灯

热门文章

  1. 横向对比EXT4,带你感受真实的Linux文件系统F2FS
  2. BPM那些事儿——BPM与SOA的演进与展望
  3. 阻滞增长模型求解_马尔萨斯与阻滞增长模型对于人口预测的分析
  4. vue axios ts 封装流文件下载方法
  5. html 360浏览器表单自动填写,360 浏览器自动填表: 让重复填表见鬼去
  6. 图论及其应用(基础知识)(1)(数学建模基础速成)
  7. Jensen不等式简介
  8. stm32单片机端口映射_STM32F103C8T6 can端口映射
  9. WinRAR美化增强版 v5.10 简体中文版
  10. python 大智慧股池_大智慧竞价股池