- The condensation of a directed graph.
- A bit-parallel algorithm for testing reachability in a directed acyclic graph; after a linear number of bit-vector operations, one can test reachability between any pair of vertices in constant time.
- A 2-satisfiability solver that uses reachability in the condensation of an implication graph to determine which variables have values that are fixed to true or fixed to false in all solutions to a given 2SAT instance.
- An optional rule for my Sudoku solver that transforms the puzzle into a 2SAT instance with at least as many solutions, and uses the fixed variables of this instance to make inferences about the puzzle.
The new smarter Sudoku solver still needs to backtrack on some puzzles, but many fewer of them than before. Here's one that it still finds difficult:
----------------------------------- | . . . | 9 . 2 | . . . | | | | | | 8 . . | . 4 . | . . 3 | | | | | | . 4 . | 7 . . | 1 . . | |-----------------------------------| | . . 6 | . . 9 | . . 1 | | | | | | . 2 . | . . . | . 7 . | | | | | | 5 . . | 3 . . | 4 . . | |-----------------------------------| | . . 7 | . . 3 | . 6 . | | | | | | 6 . . | . 1 . | . . 5 | | | | | | . . . | 2 . 6 | . . . | -----------------------------------