Combine is an OCaml library for combinatorics problem solving formed by several modules:

Dlx: implements Knuth's dancing links

Zdd: implements Zero-suppressed binary decision diagrams

Emc: a common interface to modules Dlx and Zdd to solve the Exact Matrix Cover problem

Tiling: converts a 2D tiling problem into an EMC problem

Several combinatorics problems can easily be encoded as EMC problems, e.g. Sudoku or N-queens.

Combine also contains an interpreter for a language (combine) to describe 2D tiling problems (such as Pentominos) and solve them or counting their solutions. The archive contains some examples.