2
3
4
5
6
19#include "util/concepts.hpp"
23
24
27
28
29
30
31
35
36
37
38
42
43
44
45
49
50
51
52
53
54 template<std::ranges::range R>
56 static_assert(clause_like<std::ranges::range_value_t<R>>,
57 "The range you passed to this function does not hold elements that are clause-like");
59 std::size_t nClauses = 0;
60 for (
const auto &c: clauses) {
63 maxLit = std::max(maxLit.get(), l.get());
68 std::vector<std::string> lines;
69 lines.reserve(nClauses);
70 for (
const auto &clause: clauses) {
72 for (
auto l: clause) {
73 ss << to_dimacs(l) <<
" ";
77 lines.emplace_back(ss.str());
81 ss <<
"p cnf " << numVars <<
" " << nClauses << std::endl;
82 for (
const auto &l: lines) {
90
91
92
93
94
97 return to_dimacs(literals | std::views::transform([](
auto literal) {
return std::vector{literal}; }));
Structure representing a literal in a CNF-SAT problem.
Definition basic_structures.hpp:56
short sign() const
Definition basic_structures.cpp:38
Structure representing a binary variable in a CNF-SAT problem.
Definition basic_structures.hpp:29
unsigned get() const
Definition basic_structures.cpp:18
Definition heuristics.hpp:33
Namespace containing dimacs io utilities.
Definition inout.cpp:34
auto read_from_dimacs(std::istream &in) -> std::pair< std::vector< std::vector< Literal > >, std::size_t >
Definition inout.cpp:45
int to_dimacs(Literal l) noexcept
Definition inout.cpp:40
Literal from_dimacs(int val) noexcept
Definition inout.cpp:35
std::string to_dimacs(const R &clauses)
Definition inout.hpp:55
std::string to_dimacs(const L &literals)
Definition inout.hpp:96
Definition basic_structures.cpp:10
Literal neg(Variable x)
Definition basic_structures.cpp:50
Literal pos(Variable x)
Definition basic_structures.cpp:46
Variable var(Literal l)
Definition basic_structures.cpp:54