/**回溯法 **按照深度优先的策略,从根节点出发搜索 **解空间树 **只求通解(通用的解题法),而不是最优解 **适用于一些组合数较大的问题 */ template <class data> bool backtrack(int a[],int k,data input) { int c[MAXCANDIDATES]; int ncandidates; int i; if(is_a_solution(a,k,input)) process_solution(a,k,input); // process_solution(a,k); //构造所有子集 else { k = k +1; construct_candidates(a,k,input,c,&ncandidates); for(i = 0; i < ncandidates; i++) { a[k] = c[i]; backtrack(a,k,input); if(finished) //terminate early return; } } }