Просмотр исходного кода

add commented out debug statements

they are quite interesting to "follow" the algorithm as it searches for
a solution.
Lucas Stadler лет назад: 10
Родитель
Сommit
2c471cd484
1 измененных файлов с 4 добавлено и 0 удалено
  1. 4 0
      rust/solve/src/dpll.rs

+ 4 - 0
rust/solve/src/dpll.rs

133
    
133
    
134
    loop {
134
    loop {
135
        if clauses.iter().all(|c| is_clause_satisfied(&vars, c.clone())) { // all clauses satisfied, success
135
        if clauses.iter().all(|c| is_clause_satisfied(&vars, c.clone())) { // all clauses satisfied, success
136
            //println!("satisfied");
136
            return Some(vars.clone())
137
            return Some(vars.clone())
137
        } else if clauses.iter().any(|c| is_clause_conflict(&vars, c.clone())) { // a conflict exists, backtrack
138
        } else if clauses.iter().any(|c| is_clause_conflict(&vars, c.clone())) { // a conflict exists, backtrack
138
            match stack.pop() {
139
            match stack.pop() {
139
                None => return None, // nothing to backtrack, no solution found
140
                None => return None, // nothing to backtrack, no solution found
140
                Some((v, b)) => {
141
                Some((v, b)) => {
142
                    //println!("backtrack! {}", v);
141
                    vars.clone_from(&b);
143
                    vars.clone_from(&b);
142
                    vars.insert(v);
144
                    vars.insert(v);
143
                }
145
                }
146
            let cs = clauses.clone();
148
            let cs = clauses.clone();
147
            let clause = cs.iter().find(|&c| is_clause_unit(&vars, c.clone())).unwrap();
149
            let clause = cs.iter().find(|&c| is_clause_unit(&vars, c.clone())).unwrap();
148
            let unknown = *clause.iter().find(|&v| is_unknown(&vars, *v)).unwrap();
150
            let unknown = *clause.iter().find(|&v| is_unknown(&vars, *v)).unwrap();
151
            //println!("propagate {} from {:?}", unknown, clause);
149
            vars.insert(unknown);
152
            vars.insert(unknown);
150
        } else { // none of the above, decide (guess) an unknown variable
153
        } else { // none of the above, decide (guess) an unknown variable
151
            let mut unknown: Var = 0;
154
            let mut unknown: Var = 0;
163
            }
166
            }
164
            assert!(unknown != 0);
167
            assert!(unknown != 0);
165
            stack.push((unknown, vars.clone()));
168
            stack.push((unknown, vars.clone()));
169
            //println!("decide {}", -unknown);
166
            vars.insert(-unknown);
170
            vars.insert(-unknown);
167
        }
171
        }
168
    }
172
    }