chiark / gitweb /
Python code to compute upper bounds on the solution.
[matchsticks-search.git] / main.c
diff --git a/main.c b/main.c
index a57bd7231a60248d0b9b81c1df24600c12c26d6e..3ee58c59760729eba27ae8b88123caa59d9062b0 100644 (file)
--- a/main.c
+++ b/main.c
@@ -147,8 +147,10 @@ static void set_best(double new_best) {
    * subtract a fudge factor from our target.
    */
   double near_best = best * 0.98 - 0.02;
-  n_max_frags = ceil(n / near_best) - 1;
-  m_max_frags = ceil(m / near_best) - 1;
+  if (near_best > 0) {
+    n_max_frags = ceil(n / near_best) - 1;
+    m_max_frags = ceil(m / near_best) - 1;
+  }
 }
 
 /*----- multicore support -----*/
@@ -664,7 +666,7 @@ static void iterate_recurse(int i, AdjWord min) {
       if (adjmatrix[i] & jbit)
         weight[j]++;
     for (int j = 0; j < m; j++)
-      if (weight[j] >= n_max_frags)
+      if (weight[j] > n_max_frags)
         goto takeout;
 
     iterate_recurse(i+1, adjmatrix[i]);
@@ -731,10 +733,11 @@ static void report(void) {
  
 int main(int argc, char **argv) {
   int opt;
+  double best_to_set = -1.0; /* means 'don't' */
   while ((opt = getopt(argc,argv,"j:b:")) >= 0) {
     switch (opt) {
     case 'j': ncpus = atoi(optarg); break;
-    case 'b': set_best(atof(optarg)); break;
+    case 'b': best_to_set = atof(optarg); break;
     case '+': assert(!"bad option");
     default: abort();
     }
@@ -745,6 +748,7 @@ int main(int argc, char **argv) {
   n = atoi(argv[1]);
   m = atoi(argv[2]);
   assert(n > m);
+  if (best_to_set > 0) set_best(best_to_set);
 
   prep();