日期:2014-05-20  浏览次数:20785 次

哪位帮我看看这个组合问题代码哪里错了
debug时 data为-45,请教下各位...
import java.util.Arrays;

/*
 * 从一个集合里选出几个数,使他们的和等于给定的数
 * 方法:回溯法 
 */
public class SelectNumQuestion {
public static int num[] ={ 4,2,8,7,9,6,3,5,1 } ;
public static int sum = 13 ;
public static int data = 0 ;
public static int is_not[] ={0,0,0,0,0,0,0,0,0} ;
/*先把集合里的数进行排序
 * 然后按照二叉树的模式(0,1),利用回溯法求出所有可能的解
 */
public static void back(int[] num,int len,int i){
if(data==sum){
for(int j = 0;j<len;++j){
if(is_not[j]==1){//选中
System.out.print(num[j]) ;
}
}
System.out.println() ;
}else if(data+num[i]<=sum){
for(int flag=0;flag<=1;++flag){
if(flag==1){
data += num[i] ;
is_not[i] = 1;
}else{
data -= num[i] ;
is_not[i] = 0 ;
}
back(num,len,i+1) ;
}
}
}
public static void main(String[] args) {
Arrays.sort(num) ;
back(num,9,0);
}

}

------解决方案--------------------
你的这个思想有点难理解,给你个链接看看 ,会有启发的http://bbs.csdn.net/topics/390370036