4 * TotalOrder(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
19 int main(int numargs, char **argv) {
20 CSolver *solver = new CSolver();
21 uint64_t set1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
22 Set *s = solver->createSet(0, set1, 9);
23 Order *order = solver->createOrder(SATC_TOTAL, s);
24 BooleanEdge b12 = solver->orderConstraint(order, 1, 2);
25 solver->addConstraint(b12);
26 BooleanEdge b23 = solver->orderConstraint(order, 2, 3);
27 solver->addConstraint(b23);
28 BooleanEdge b14 = solver->orderConstraint(order, 1, 4);
29 solver->addConstraint(b14);
30 BooleanEdge b45 = solver->orderConstraint(order, 4, 5);
31 solver->addConstraint(b45);
32 BooleanEdge b56 = solver->orderConstraint(order, 5, 6);
33 solver->addConstraint(b56);
34 BooleanEdge b17 = solver->orderConstraint(order, 1, 7);
35 solver->addConstraint(b17);
36 BooleanEdge b78 = solver->orderConstraint(order, 7, 8);
37 solver->addConstraint(b78);
38 BooleanEdge b89 = solver->orderConstraint(order, 8, 9);
39 solver->addConstraint(b89);
40 BooleanEdge b92 = solver->orderConstraint(order, 9, 2);
41 solver->addConstraint(b92);
42 BooleanEdge b62 = solver->orderConstraint(order, 6, 2);
43 solver->addConstraint(b62);
45 BooleanEdge v6 = solver->getBooleanVar(0);
46 BooleanEdge v7 = solver->getBooleanVar(0);
47 BooleanEdge v8 = solver->getBooleanVar(0);
48 solver->addConstraint(solver->applyLogicalOperation(SATC_OR, solver->applyLogicalOperation(SATC_IFF, v7, v8), v6));
49 solver->addConstraint(solver->applyLogicalOperation(SATC_NOT, v6));
50 solver->addConstraint(solver->applyLogicalOperation(SATC_NOT, v8));
51 BooleanEdge b48 = solver->orderConstraint(order, 4, 8);
52 solver->addConstraint(b48);
53 BooleanEdge b57 = solver->orderConstraint(order, 5, 7);
54 solver->addConstraint(b57);
57 if (solver->solve() == 1) {
59 printf("O(5,1)=%d O(1,4)=%d O(5,4)=%d O(1,5)=%d\n",
60 solver->getOrderConstraintValue(order, 5, 1),
61 solver->getOrderConstraintValue(order, 1, 4),
62 solver->getOrderConstraintValue(order, 5, 4),
63 solver->getOrderConstraintValue(order, 1, 5));