X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=main.c;h=e8915f7c5661dcd93fb75479e22f80ebce7f629a;hb=966b39b19e31dfe232d74da21c76f2981eae2201;hp=d8ae901500852542834597f73332f1e5d70fbc1e;hpb=0a304c57bbfad64d7ad5ac3c124b6d43fd12b327;p=matchsticks-search.git diff --git a/main.c b/main.c index d8ae901..e8915f7 100644 --- a/main.c +++ b/main.c @@ -91,6 +91,8 @@ typedef uint32_t AdjWord; #define PRADJ "08"PRIx32 +#define FOR_BITS(j,m) for (j=0, j##bit=1; j < (m); j++, j##bit<<=1) + static int n, m, maxhamweight; static AdjWord *adjmatrix; static AdjWord adjall; @@ -356,14 +358,17 @@ static void prep(void) { n_over_best = INT_MAX; } +#if 0 static AdjWord one_adj_bit(int bitnum) { return (AdjWord)1 << bitnum; } +#endif static int count_set_adj_bits(AdjWord w) { - int j, total; - for (j=0, total=0; j= n) { printcounter++; optimise(!(printcounter & 0xfff)); @@ -615,8 +624,8 @@ static void iterate_recurse(int i, AdjWord min) { if (i == 0 && (adjmatrix[i] & (1+adjmatrix[i]))) goto again; - for (int j = 0; j < m; j++) - if (adjmatrix[i] & one_adj_bit(j)) + FOR_BITS(j,m) + if (adjmatrix[i] & jbit) weight[j]++; for (int j = 0; j < m; j++) if (weight[j] >= n_over_best) @@ -625,8 +634,8 @@ static void iterate_recurse(int i, AdjWord min) { iterate_recurse(i+1, adjmatrix[i]); takeout: - for (int j = 0; j < m; j++) - if (adjmatrix[i] & one_adj_bit(j)) + FOR_BITS(j,m) + if (adjmatrix[i] & jbit) weight[j]--; again: