Beispiel #1
0
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();
        }
    }
}
Beispiel #4
0
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 */
        }
    }
}
Beispiel #6
0
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;
        }
    }
}
Beispiel #7
0
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;
        }
    }
}
Beispiel #8
0
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;
    }
  }
}