博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
子集和问题
阅读量:4187 次
发布时间:2019-05-26

本文共 1091 字,大约阅读时间需要 3 分钟。

子集和问题的一个实例为〈S,t〉。其中,S={ x1, x2,…, xn}是一个正整数的集合,c是一个正整数。子集和问题

判定是否存在S的一个子集S1,使得子集S1和等于c。 设计一个回溯法来求解该问题。

解题思路:对于该集合的每一个子集,若元素和为正整数c,则将该子集放入解集中,最后返回解集即可。

/**	 * @param list 存放所有满足要求的解	 * @param tempList 存放每一轮的解	 * @param nums 正整数集合	 * @param target 目标和	 * @param start 开始位置	 * @param sum 每一个子集和	 */	public void backtrack(List
> list, ArrayList
tempList, int[] nums, int target, int start, int sum) { if (sum == target) // 找到一个满足条件的解 { list.add(new ArrayList<>(tempList)); } for (int i=start; i
> list = new ArrayList<>(); ArrayList
tempList = new ArrayList<>(); backtrack(list, tempList, s, target, 0, 0); if (list.size() == 0) System.out.println("No Solution"); else System.out.println(Arrays.toString(list.toArray())); }

也可以省去backtrack函数中的参数sum。代码如下:

public void backtrack(List
> list, ArrayList
tempList, int[] nums, int target, int start) { if (target == 0) // 找到一个满足条件的解 { list.add(new ArrayList<>(tempList)); } for (int i=start; i

非递归回溯法:

转载地址:http://pcpoi.baihongyu.com/

你可能感兴趣的文章
Spring MVC与JAX-RS比较与分析
查看>>
openstack官方docker介绍
查看>>
头痛与早餐
查看>>
[转]在ASP.NET 2.0中操作数据::创建一个数据访问层
查看>>
Linux命令之chmod详解
查看>>
【java小程序实战】小程序注销功能实现
查看>>
linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
查看>>
pentaho套件
查看>>
软件产品经理职责
查看>>
Linux下Tomcat的安装配置
查看>>
UI即User Interface
查看>>
大数据要学习知识
查看>>
Elasticsearch Java API总汇
查看>>
SearchRequestBuilder常用方法说明
查看>>
为什么有的程序员的代码结构混乱
查看>>
查看数据库
查看>>
SQLite 数据库
查看>>
行业应用
查看>>
工作的常识
查看>>
java里面获取map的key和value的方法
查看>>