#include #include #include #include #include #include "lceb.h" static int target=0; //static int best=MAXINT; static int bestdiff=MAXINT; static int bestops=MAXINT; static BEST bests[1024*10]; /* TODO: should be dynamic */ static int nbests=0; #define DIFF(a, b) ((a)>(b)?(a)-(b):(b)-(a)) void set_target(n) int n; { target=n; } 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 DEBUG1 printf("check_best: res=%d diff=%d nops=%d\n", res, diff, nops); # endif if (diff < bestdiff || (diff == bestdiff && nops < bestops)) { # ifdef DEBUG // printf("NEW BEST! res=%d diff=%d nops=%d\n", res, diff, nops); printf("diff=%d nops=%d %d=", diff, nops, res); print_node(node, TREE_TOP, 0, 4); putchar('\n'); //printf("check_best: res=%d diff=%d nops=%d\n", res, diff, nops); # endif //best=res; // clear old bests for (i=0; itype == TREE_LEAF) { printf("%d ", *vals); vals++; } else { print_best(node->left, 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; printf("BESTS: diff=%d solutions=%d nops=%d\n", bestdiff, nbests, bestops); for (i=0; i