pub struct HornSatisfiability {
literals: Vec<Option<bool>>,
clauses: Vec<(usize, usize, bool)>,
idx: Vec<Vec<usize>>,
satisfiable: bool,
stack: Vec<usize>,
}Expand description
Horn Satisfiability
$\wedge(\wedge_i v_{p_i}\rightarrow v_q = f)$
Fields§
§literals: Vec<Option<bool>>§clauses: Vec<(usize, usize, bool)>§idx: Vec<Vec<usize>>§satisfiable: bool§stack: Vec<usize>Implementations§
Source§impl HornSatisfiability
impl HornSatisfiability
pub fn new(size: usize) -> Self
pub fn add_clause( &mut self, p: impl IntoIterator<Item = usize>, q: usize, f: bool, )
pub fn is_satisfiable(&self) -> bool
pub fn solve(&self) -> Option<Vec<bool>>
Sourcefn resolve(&mut self)
fn resolve(&mut self)
Examples found in repository?
crates/competitive/src/algorithm/horn_satisfiability.rs (line 35)
23 pub fn add_clause(&mut self, p: impl IntoIterator<Item = usize>, q: usize, f: bool) {
24 let mut count = 0;
25 let id = self.clauses.len();
26 for p_i in p.into_iter() {
27 if self.literals[p_i] != Some(true) {
28 self.idx[p_i].push(id);
29 count += 1;
30 }
31 }
32 self.clauses.push((count, q, f));
33 if count == 0 {
34 self.stack.push(id);
35 self.resolve();
36 }
37 }Auto Trait Implementations§
impl Freeze for HornSatisfiability
impl RefUnwindSafe for HornSatisfiability
impl Send for HornSatisfiability
impl Sync for HornSatisfiability
impl Unpin for HornSatisfiability
impl UnsafeUnpin for HornSatisfiability
impl UnwindSafe for HornSatisfiability
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more