void backtrack(int a[], int k, int input, int indent) { int c[20]; /* candidates for next position */ int ncandidates; /* next position candidate count */ int i; /* counter */ for (i=0; i<indent; i++) { printf("\t"); } for(i=1; i<=k;i++) printf("%d ", a[i]); printf("k=%d, indent=%d\n",k, indent); if (is_a_solution(a,k,input)) { process_solution(a,k, indent); } 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, indent+1); if (finished) return; /* terminate early */ } } }
void backtrack(int a[], int k, void* input) { int c[MAXCANDIDATES]; int ncandidates; if (is_a_solution(a, k, input)) { process_solution(a, k, input); } else { k = k + 1; construct_candidates(a, k, input, c, &ncandidates); for (int i = 0; i < ncandidates; i++) { a[k] = c[i]; make_move(a, k, input); backtrack(a, k, input); unmake_move(a, k, input); if (finished) return; } } }
void backtrack(vector<int>& nums,int k, int n) { if (is_a_solution(nums, k ,n )) process_solution(nums); else { vector<int> cand; construct_cand(nums, k, n, cand); for (int i = 0; i < cand.size(); i++) { nums.push_back(cand.at(i)); backtrack(nums, k, n); nums.pop_back(); } } }
void backtrack(int a[], int k, int n,char items[]) { int c[MAXCANDIDATES]; /* candidates for next position */ int ncandidates; /* next position candidate count */ int i; /* counter */ if (is_a_solution(a, k, n)) process_solution(a, k, items); else { k = k+1; construct_candidates(a, k, n, c, &ncandidates); for (i=0; i<ncandidates; i++) { a[k] = c[i]; backtrack(a, k, n,items); } } }
void backtrack(int a[], int k, int input) { int c[MAXCANDIDATES]; /* candidates for next position */ int ncandidates; /* next position candidate count */ if (is_a_solution(a,k,input)) process_solution(a,k,input); else { k = k+1; construct_candidates(a,k,input,c,ncandidates); for(int i = 0; i < ncandidates; i++) { a[k] = c[i]; backtrack(a,k,input); if (finished) return; /* terminate early */ } } }
static void backtrack(int a[], int k, int n) { int c[CANDIDATES_MAX + 1]; int nr_candidates; int i; if (is_a_solution(a, k, n)) process_solution(a, k); else { k += 1; generate_candidates(a, k, n, c, &nr_candidates); for (i = 0; i < nr_candidates; i++) { a[k] = c[i]; backtrack(a, k, n); if (finished) return; } } }
void backtrack(int a[], int k, int input) { int c[MAXCANDIDATES], ncandidates, i; dprintf("backtrack(k=%d, in=%d)...a[", k, input); for (int i = 1; i <= k; ++i) dprintf("%d, ", a[i]); dprintf("]\n"); if (is_a_solution(a, k, input)) process_solution(a, k); else { k++; construct_candidates(a, k, input, c, &ncandidates); dprintf("process %d candidates\n", ncandidates); for (i = 0; i < ncandidates; i++) { a[k] = c[i]; backtrack(a, k, input); dprintf("after call to backtrack for k = %d, i = %d\n", k, i); if (finished) return; } } }
void backtrack(int a[], int k, int input) { int c[MAXCANDIDATES]; int ncandidates; int i; dbg_log(1, "backtrack - enter k %d\n", k); if (is_a_solution(a, k, input)) process_solution(a, k); else { k++; construct_candidates(a, k, input, c, &ncandidates); dbg_log(1, "process %d candidates\n", ncandidates); for (i = 0; i < ncandidates; i++) { a[k] = c[i]; backtrack(a, k, input); if (finished) return; } } }
void backtrack(int a[], int k, data input) { int c[MAXCANDIDATES]; /* candidates for next position */ int ncandidates; /* next position candidates count */ int i; if (is_a_solution(a, k, input)) process_solution(a, k, input); else { ++k; construct_candidates(a, k, input, c, &ncandidates); for (i=0; i<ncandidates; ++i) { a[k] = c[i]; make_move(a, k, input); backtrack(a, k, input); unmake_move(a, k, input); if (finished) return; } } }