+ return 1;
+
+ out:
+ return 0;
+}
+
+static void optimise(bool doprint) {
+ /* Consider the best answer (if any) for a given adjacency matrix */
+ glp_prob *prob = 0;
+ int i, j;
+
+ /*
+ * Up to a certain point, optimise() can be restarted. We use this
+ * to go back and print the debugging output if it turns out that we
+ * have an interesting case. The HAVE_PRINTED macro does this: its
+ * semantics are to go back in time and make sure that we have
+ * printed the description of the search case.
+ */
+#define HAVE_PRINTED ({ \
+ if (!doprint) { doprint = 1; goto retry_with_print; } \
+ })
+ retry_with_print:
+ if (prob) {
+ glp_delete_prob(prob);
+ prob = 0;
+ }
+
+ bool ok = preconsider_ok(n, doprint);
+ if (!ok)
+ goto out;