这段代码与之前发布的01背包问题密切相关。在使用暴力法解决01背包问题的时候,最大的问题在于求出一个数组的所有子集,并在这些子集中搜索出最优解。也曾经在网上搜索了大家关于求子集的问题的答案,深受启发,所以在这里把代码贴出来,以供后来者参考。代码没有经过太多的优化,可能看起来比较Ugly。

#include

//k是开始字符的位置,n是数组的长度,l是子集的位数

void subArray(int A[], int k,int l, int n);

//初始化整个子集数组

void initArray(int n);

//用于输出子集的数组

int priArray[4];

void printArray(int n);

int counter = 0;

int main()

{

int i;

int array[4] = {1, 2 , 3, 4};

//0是所有数组的子集

printf("0\n");

counter += 1;

for (i = 0; i < 4; i++)

{

initArray(4);

//递归算法需要保证从第一个元素开始的所有的元素都被遍历到

priArray[0] = array[i];

counter += 1;

printArray(1);

subArray(array, i+1, 2, 4);

}

printf("\nThe SubArray is %d\n", counter);

return 0;

}

/*

* 该递归算法每次只向后寻找一位数字。

* 例如k=1时,只会寻找2,3,4;k=2时,只会寻找3,4

*/

void subArray(int A[], int k, int l, int n)

{

int i;

if (k == n-1)

{

//n是整个数组的长度,k是整个子集的上一位字符,当k == n-1时,意味着已经是最后一个了。

priArray[l-1] = A[k];

counter += 1;

printArray(l);

}

else

{

for ( i= k; i <= n-1; ++i)

{

priArray[l-1] = A[i];

counter += 1;

printArray(l);

subArray(A, i+1, l+1,n);

}

}

}

/*

* 打印子集数组的函数

*/

void printArray(int n)

{

int i;

for (i = 0; i < n; i++)

{

printf("%d", priArray[i]);

}

printf("\n");

}

void initArray(int n)

{

for (int i = 0; i<= n-1 ; i++) {

priArray[i] = 0;

}

}

ps:用vc运行了一下,结果如图,

c语言数组子集,C语言实现数组所有子集相关推荐

  1. c语言用随机数定义数组中,C语言 将发生的随机数存入数组,数据不能相同

    C语言 将产生的随机数存入数组,数据不能相同 1.定义一个一维数,数组大小为24. 2.产生0~23的随机数. 3.将产生的随机数存入i数组,要求数组中的每个数据不能相同. 4.补充说明,这个子程序要 ...

  2. go语言查询某个值是否在数组中_Go语言数组详解

    数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.因为数组的长度是固定的,所以在Go语言中很少直接使用数组. 和数组对应的类型是 Slice(切片),Slice 是可以增 ...

  3. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

    文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...

  4. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  5. r语言中矩阵QR分解_从零开始学R语言Day4|向量、矩阵和数组

    从零开始学R语言Day4|向量.矩阵和数组 1.1向量 1.1.1向量 在Day2中我们提及过用和c()函数来构建向量,具体实例如下. 我们还可以采用vector("类型",长度) ...

  6. C语言结构体和结构体数组示例 - Win32窗口程序演示

    C语言结构体和结构体数组的使用: /* C结构体和结构体数组示例,by bobo */#include <windows.h>LRESULT CALLBACK WndProc (HWND, ...

  7. Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离

    Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...

  8. C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt

    C语言第13讲指针与字符串(字符数组).ppt 6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串. 字符数组元素个数确定,一般用下标控制循环. 字符串有效字符个数由0确定,用结束符0控 ...

  9. 【☀️C语言函数传参の结构体数组篇☀️】

    背景介绍 C语言中函数参数传递的两种方式("引用传递做函数参数"是C++的特性,C语言不支持.) (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个 ...

最新文章

  1. 如何创建一个基础jQuery插件
  2. 互联网项目管理要点(转)
  3. 设计模式之美:Adapter(适配器)
  4. 修改xampp的mysql默认密码
  5. 匹配中文字符的正则表达式: [/u4e00-/u9fa5]
  6. javascript调用Flash里对象的方法(函数)搞了五个小时。
  7. 这本Python书被封年度神作!程序员:比女友强太多!
  8. 设置只能开启一个程序实例
  9. 简单的linux下docker的下载与安装
  10. 第七周-C语言 求方程的共轭复根
  11. 制作Lightbox效果
  12. Python爬取多网页表格数据(非table)
  13. 《莎士比亚》文本生成
  14. 人工神经网络基本构成有哪些具有什么特征
  15. 种子是down.php,[原创作品][PHP]BT种子打包推送小神器~~
  16. 保姆级教程:群晖nas内网穿透之ipv6/ipv4 ddns+frp双管齐下!
  17. SpringSecurity 安全框架
  18. 论文图片排版 Adobe Illustrator 操作演示
  19. Word文档中插入的图片显示不全、嵌入式图片显示不全解决方法,仅设置图片为单倍行距方法
  20. 【热门书籍】温度决定生老病死 作者:马悦凌

热门文章

  1. 计算机硕士非全日制的有双证吗,双证非全日制太坑了?非全日制研究生有哪些优势?...
  2. 联想小新一键恢复小孔_联想小新笔记本如何一键恢复出厂设置_联想小新air恢复出厂设置教程...
  3. 计算机语言python怎么读,python编程怎么读音发音
  4. alpha和color key
  5. Ghost 的高可用安装 安装篇
  6. 飞控学习常见典型问题集QA——无名创新(2022年4月15日)
  7. mpu9250磁力计校准 mpl库数据校准
  8. 编程团体赛 python
  9. 中国计算机学会推荐国际学术会议
  10. 构建Lua解释器Part8:构建完整的语法分析器(下)