#include #include #include #include #include #include #include "lceb.h" static int target=0; static int bestdiff=MAXINT; static int bestops=MAXINT; static BEST bests[1024*10]; /* TODO: should be dynamic */ static int nbests=0; extern int displaytimer, firstonly; int displayintermediate=0; int displaytype=0; #define DIFF(a, b) ((a)>(b)?(a)-(b):(b)-(a)) void set_target(n) int n; { target=n; # ifdef DEBUG printf("target assigned (%d).\n", target); # endif } int check_best(res, nops, node, values, ops) int res; int nops; NODE *node; int *values; char *ops; { int diff, found=0, i=0; diff=DIFF(target, res); # ifdef DEBUG_BEST1 printf("check_best: res=%d diff=%d nops=%d\n", res, diff, nops); # endif if (diff < bestdiff || (diff == bestdiff && nops < bestops)) { //best=res; // clear old bests for (i=0; ileft, vals, ops, depth+1); print_best(node->right, vals, ops, depth+1); printf(" %c ", *ops); ops++; } if (depth == 0) putchar('\n'); } void print_bests() { int i=0, j=firstonly? 1: nbests; if (bestdiff==0) { printf("Le compte est bon: %d solutions with %d ops ", nbests, bestops); } else { printf("Found %d results with difference %d and %d ops ", nbests, bestdiff, bestops); } //if (displaytimer) printf("(1st after %.5f secs).", get_timer(bests[i].timer)); putchar('\n'); for (i=0; i