Solving domino fit using constraint programming
pedtsr.ca
pedtsr.ca
(with editable Prolog code ready to execute in the browser even)
One minor suggestion: You could remove all of the corner and border special cases for overlap testing by making the grid 2 columns wider and 2 rows taller, offsetting all coordinates by 1, and pretending that the outer "border" on all sides of this slightly larger grid is covered with black cells.
There's probably better ways of doing it, but I already know TLA+ and TLC does a breadth-first search so it'll find the shortest path.