From 865d4ae30f50525a2ebd793267f130cfc81a4571 Mon Sep 17 00:00:00 2001 From: Hamed Gorjiara Date: Sat, 4 Aug 2018 18:57:46 -0700 Subject: [PATCH] bug fix for odd-size tables --- nqueens/nqueens.cc | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/nqueens/nqueens.cc b/nqueens/nqueens.cc index bed871ab..616600eb 100644 --- a/nqueens/nqueens.cc +++ b/nqueens/nqueens.cc @@ -211,7 +211,8 @@ void originalNqueensEncoding(int N){ } //Symmetry breaking constraint - for (int i=0; i& elems){ - Predicate *eq = solver->createPredicateOperator(SATC_EQUALS); - vector constr; - for(int i=0; igetElementConst(2, (uint64_t)i); - Element *inputs2 [] = {e1x, e2x}; - BooleanEdge equals = solver->applyPredicate(eq, inputs2, 2); - constr.push_back( equals); - } - solver->addConstraint(solver->applyLogicalOperation(SATC_OR, &constr[0], constr.size()) ); - Predicate *lt = solver->createPredicateOperator(SATC_LT); + int mid = N/2 + N%2; Element *e1x = elems[0]; - Element *e2x = elems[N-1]; + Element *e2x = solver->getElementConst(2, mid); + Element *inputs [] = {e1x, e2x}; + solver->addConstraint(solver->applyPredicate(lt, inputs, 2)); + + e2x = elems[N-1]; Element *inputs2 [] = {e1x, e2x}; BooleanEdge equals = solver->applyPredicate(lt, inputs2, 2); solver->addConstraint(equals); -- 2.34.1