子集和数问题——回溯法
回溯算法可以用来求最优解,也可以用来搜索某些问题的答案。回溯法又叫做试探法,它是以深度优先遍历的方式找各种符合要求的答案,在查找过程中伴随着一些减枝函数来提高效率。这种算法比较简单,比较出名的问题有8皇后问题。这个子集和数问题也可以用回溯法搞定。。。
所谓子集和数问题,就是给定你一个数的集合M,再给你一个数num,找出所有属于M且和为num的数的集合。比如M={1,2,3} num=3,则N为{1,2}和{3}。这些都比较简单,还是直接上代码吧。。。
public class SubNum {
// 初始化化一个数组
int M[] = {1,2,3,4,5,6,7,8,9};
int N[] = new int[9];
//用来标识在某种组合中某个数字是否出现
boolean [] judge =new boolean [9];
int num;//给定的num
int temp;//保存和
// 初始化化num
public SubNum(int num) {
this.num = num;
}
// 采用回溯法解决。。
public void findSub() {
for (int a = 0; a < M.length; a++) {
for (int b = a + 1; b < M.length; b++) {
for(int i=0;i<M.length;i++){//初始化标示数组
judge [i]=false;
}
temp = M[a];
judge[a]=true;
for (int c = b; c < M.length; c++) {
temp += M[c];
judge[c]=true;
if (num == temp) {// 子集找到
for(int i=0;i<M.length;i++){
if(judge[i]==true)
System.out.print(M[i]+"+");
}
System.out.print("是一种答案");
System.out.println();
temp = temp - M[c];//回溯上一个节点
judge[c]=false;
} else if (temp > num) {// 若果大于,则不加这个数,加下一个。
temp = temp - M[c];
judge[c]=false;
} else if (temp < num) {
// break;// 如果仍小于,继续+。
}
}
}
}
}
public void testlast(){
if (M[M.length - 1] == num)//测试最后一位是否满足条件。。。
System.out.println(M[M.length-1] + "是一种答案");
}
public static void main(String[] agrs) {
SubNum sn = new SubNum(12);
sn.findSub();
sn.testlast();
}
}
测试结果为:
1+5+6+是一种答案
3+4+5+是一种答案
3+9+是一种答案
4+8+是一种答案
5+7+是一种答案
上面的代码有不完善的地方,我减去的旁枝较少,效率还不是很高,不过能基本体现回溯法。。。总之,理解了回溯法深度优先遍历且尽量剪去不必要枝叶的思想即可。。。
分享到:
相关推荐
回溯法是一种强大的算法策略,常用于解决组合优化问题,如子集和问题。这个问题的目标是从给定的一组整数中找出所有可能的子集,使得这些子集的元素和等于一个特定的目标值。在本案例中,我们将深入探讨如何使用回溯...
在这个问题中,我们使用C语言来解决,同时标签指出了解决这个问题的一种常见方法——回溯法。 首先,我们要理解什么是回溯法。回溯法是一种试探性的解决问题的方法,它通过尝试所有可能的解决方案,并在过程中逐步...
经典的子集问题可以通过递归或回溯法来解决。对于一个包含n个元素的集合,它有2^n个不同的子集(包括空集和集合本身)。递归方法的基本思路是从第一个元素开始,每次决策是否将其加入当前子集,这样就形成了两个分支...
此外,“子集和数问题”是另一类搜索问题,它涉及到寻找一个集合的所有子集,并计算这些子集的和。动态规划和递归搜索技术在这里非常有用,可以帮助我们高效地求解。 最后,我们将触及“水杯问题”,这是一个需要...
"SMART 200系列地址库:灵活配置的位读写系统",SMART 200 寻址-库 6个子 位:一个读,一个写 读:例如 读取从V0.0开始的第N个位的状态 写:例如 将值写入V0.0开始的第N个位中 起始地址和第几个位都可自定义 字节:读写一体,引脚控制读或写 字:读写一体,引脚控制读或写 双字:读写一体,引脚控制读或写 实数:读写一体,引脚控制读或写 ,核心关键词:SMART 200; 寻址-库; 子位; 读; 写; 起始地址; 自定义; 字节; 字; 双字; 实数。,"SMART 200库:位寻址与多读写功能"
1、文件内容:perl-ExtUtils-Manifest-1.61-244.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-ExtUtils-Manifest-1.61-244.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
多水下航行器协同定位的MATLAB仿真:基于《Cooperative Localization for Autonomous Underwater Vehicles》的研究与实践,【7】MATLAB仿真 多水下航行器协同定位,有参考文档。 主要参考文档: 1. Cooperative Localization for Autonomous Underwater Vehicles,The International Journal of Robotics Research 主要供文档方法的学习 非全文复现。 ,MATLAB仿真; 多水下航行器协同定位; 参考文档; 自主水下航行器; 机器人学国际期刊; Cooperative Localization。,MATLAB仿真:多水下航行器协同定位研究参考国际期刊论文
基于大语言模型的多模态社交媒体信息流行度预测研究
1、文件内容:perl-Algorithm-Diff-1.1902-17.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Algorithm-Diff-1.1902-17.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
《基于分时电价下电动汽车多类型充放电调度策略优化及其经济与负荷曲线改善分析》,11-分时电价下电动汽车充放电调度策略优化-100% 摘要:代码主要做的是分时电价下电动汽车充放电策略的优化,电动汽车选取了四种典型的类型,包括比亚迪EV,尼桑EV,宝马mini以及三菱EV,四种类型电动汽车取若干辆,约束重点关注充放电约束、蓄电量约束、0-1启停约束等等,目标函数为经济效益最优,同时考虑负荷曲线的改善,并通过图展示其结果,具体看下图。 ,核心关键词: 分时电价; 电动汽车; 充放电策略优化; 类型; 约束; 经济效益; 负荷曲线改善; 图展示。,电价优化下电动汽车充放电调度策略研究
IMG_20250130_120659.jpg
该项目是一款基于JavaScript、TypeScript和微信小程序开发的火车票购票系统源码,包含1634个文件,涵盖395个JavaScript文件、293个TypeScript文件、271个JSON配置文件、240个WXML模板文件、232个WXSS样式文件、138个WXS脚本文件,并辅以22个PNG图片、19个Markdown文档和1个JPG图片。该系统旨在提供便捷的火车票购票服务。
驱动DHT11要学会看数据手册
《COMSOL模拟增强型地热开采采热井温度变化一年周期的瞬态分析》,comsol增强型地热开采 本模型采用达西定律接口、多孔介质传热接口、非等温管道流接口,采用瞬态求解器,求解采热井一年的温度变化 ,comsol; 增强型地热开采; 达西定律接口; 多孔介质传热接口; 非等温管道流接口; 瞬态求解器; 采热井温度变化,《COMSOL模型在地热开采中模拟采热井一年温度变化的研究》
0016-08-16122503-曾洋.zip
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
week01_lab_solutions.ipynb
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
Golang. KisFlow(Keep It Simple Flow).
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx