cnf->enableMatching=true;
allocInlineDefVectorEdge(& cnf->constraints);
allocInlineDefVectorEdge(& cnf->args);
- return cnf;
+ cnf->solver=allocIncrementalSolver();
+ return cnf;
}
void deleteCNF(CNF * cnf) {
}
deleteVectorArrayEdge(& cnf->constraints);
deleteVectorArrayEdge(& cnf->args);
+ deleteIncrementalSolver(cnf->solver);
ourfree(cnf->node_array);
ourfree(cnf);
}
return e;
}
+void solveCNF(CNF *cnf) {
+ countPass(cnf);
+ convertPass(cnf, false);
+ solve(cnf->solver);
+}
+
+
void countPass(CNF *cnf) {
uint numConstraints=getSizeVectorEdge(&cnf->constraints);
VectorEdge *ve=allocDefVectorEdge();
void countPass(CNF *cnf);
void countConstraint(CNF *cnf, VectorEdge * stack, Edge e);
void addConstraint(CNF *cnf, Edge constraint);
-
+void solveCNF(CNF *cnf);
void convertPass(CNF *cnf, bool backtrackLit);
Edge iff3=constraintIFF(cnf, v3, nv1);
Edge cand=constraintAND(cnf, 3, (Edge[]) {iff1, iff2, iff3});
addConstraint(cnf, cand);
+ solveCNF(cnf);
deleteCNF(cnf);
}