子集和数问题——回溯法
子集和数问题——回溯法 回溯算法可以用来求最优解,也可以用来搜索某些问题的答案。回溯法又叫做试探法,它是以深度优先遍历的方式找各种符合要求的答案,在查找过程中伴随着一些减枝函数来提高效率。这种算法比较简单,比较出名的问题有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