working version: displays only bests results so far.
This commit is contained in:
30
eval.c
30
eval.c
@@ -2,30 +2,33 @@
|
||||
#include "lceb.h"
|
||||
|
||||
|
||||
int eval_node(node, depth, pvals, pops)
|
||||
int eval_node(node, depth, pvals, pops, ncalcs)
|
||||
NODE *node;
|
||||
int depth;
|
||||
int *pvals;
|
||||
char *pops;
|
||||
int *ncalcs;
|
||||
{
|
||||
static int *vals, *val_zero;
|
||||
static char *ops, *ops_zero;
|
||||
static int ncalc;
|
||||
static int totcalc;
|
||||
static *node_zero;
|
||||
int val1, val2, op, res=-1, i;
|
||||
int val1, val2, op, res=-1, i, lcalcs, rcalcs;
|
||||
|
||||
if (depth == 0) {
|
||||
val_zero=vals=pvals;
|
||||
ops_zero=ops=pops;
|
||||
node_zero=node;
|
||||
ncalc=0;
|
||||
totcalc=0;
|
||||
}
|
||||
# ifdef DEBUG1
|
||||
for (i=0; i<=depth; ++i)
|
||||
printf(" ");
|
||||
printf("eval : depth=%d : ", depth);
|
||||
printf("eval : depth=%d : ncalcs=%d", depth, *ncalcs);
|
||||
if (node->type == TREE_NODE) {
|
||||
printf("node(%c)\n", *ops);
|
||||
print_node(node, TREE_TOP, 0, 0);
|
||||
|
||||
} else {
|
||||
printf("val(%d)\n", *vals);
|
||||
}
|
||||
@@ -34,16 +37,20 @@ int eval_node(node, depth, pvals, pops)
|
||||
node->val=*vals;
|
||||
res=*vals;
|
||||
vals++;
|
||||
*ncalcs=0;
|
||||
//printf("leaf=%d\n", res);
|
||||
} else {
|
||||
op=*ops;
|
||||
node->op=*ops;
|
||||
ops++;
|
||||
ncalc++;
|
||||
totcalc++;
|
||||
//printf("NEW node(%s)\n", ops);
|
||||
val1=eval_node(node->left, depth+1, pvals, ops);
|
||||
val1=eval_node(node->left, depth+1, pvals, ops, &lcalcs);
|
||||
//printf("val1=%d ", val1);
|
||||
if (val1 <= 0)
|
||||
return -1;
|
||||
val2=eval_node(node->right, depth+1, pvals, ops);
|
||||
val2=eval_node(node->right, depth+1, pvals, ops, &rcalcs);
|
||||
//printf("val2=%d\n", val2);
|
||||
if (val2 <= 0)
|
||||
return -1;
|
||||
switch (op) {
|
||||
@@ -67,9 +74,12 @@ int eval_node(node, depth, pvals, pops)
|
||||
exit(1);
|
||||
break;
|
||||
}
|
||||
*ncalcs=lcalcs+rcalcs+1;
|
||||
}
|
||||
if (res > 0) {
|
||||
if (!check_best(res, *ncalcs, node, val_zero, ops_zero))
|
||||
res=-1;
|
||||
}
|
||||
if (res > 0)
|
||||
check_best(res, ncalc, node_zero, val_zero, ops_zero);
|
||||
# ifdef DEBUG1
|
||||
for (i=0; i<=depth; ++i)
|
||||
printf(" ");
|
||||
|
Reference in New Issue
Block a user