[Haskell-cafe] Sudoku Solver
ajb at spamcop.net
ajb at spamcop.net
Wed Aug 8 10:16:45 EDT 2007
G'day all.
Quoting Vimal <j.vimal at gmail.com>:
> Well, Dancing Links (DLX) is just a data structure + few techniques
> to help with the backtrack, after modeling Sudoku as a contraint
> satisfaction problem.
DLX is one realisation of an algorithm which works on boolean matrices.
It's a pointer-based backtracking algorithm with explicit "undo", so
that's arguably not the most appropriate realisation in a declarative
language, where undo should be close to free.
Just for fun, I tried implementing the exact cover algorithm using a
more Haskell-esque data realisation.
The bit matrix is represented as a pair of maps: one from column to
list of rows, and one from rows to list of columns. The first map
(column to list of rows) is implemented as a priority search queue
keyed on the number of "ones" in each column. This allows fast
selection of the smallest column.
http://andrew.bromage.org/darcs/sudoku/
I don't claim that it's fast. I didn't spend a lot of time on it.
Cheers,
Andrew Bromage
More information about the Haskell-Cafe
mailing list