static glp_prob *best_prob;
static AdjWord *best_adjmatrix;
+static int n_over_best;
+static int *weight;
+
static unsigned printcounter;
static void iterate(void);
static void set_best(double new_best) {
best = new_best;
+ n_over_best = n / best;
}
/*----- multicore support -----*/
adjmatrix = xalloc_adjmatrix();
glp_term_out(GLP_OFF);
setlinebuf(stderr);
+ weight = calloc(sizeof(*weight), m); assert(weight);
+ n_over_best = INT_MAX;
}
static AdjWord one_adj_bit(int bitnum) {
if (i == 0 && (adjmatrix[i] & (1+adjmatrix[i])))
goto again;
+ for (int j = 0; j < m; j++)
+ if (adjmatrix[i] & one_adj_bit(j))
+ weight[j]++;
+ for (int j = 0; j < m; j++)
+ if (weight[j] >= n_over_best)
+ goto takeout;
+
iterate_recurse(i+1, adjmatrix[i]);
+ takeout:
+ for (int j = 0; j < m; j++)
+ if (adjmatrix[i] & one_adj_bit(j))
+ weight[j]--;
+
again:
if (adjmatrix[i] == adjall)
return;