Skip to main content

mutilated_chessboard

Function mutilated_chessboard 

Source
pub fn mutilated_chessboard(n: usize) -> (DimacsCnf, ExpectedVerdict)
Expand description

The mutilated chessboard: an n×n board with two OPPOSITE corners removed, asking for a perfect domino tiling. Every domino covers one black and one white square, but the two removed corners share a colour (for even n), so the black/white counts differ by two and no tiling exists — UNSAT, and a textbook resolution-exponential family. The infeasibility is a bipartite-matching (Hall) obstruction, which our covering route certifies in polynomial time. Variables are dominoes (grid edges between adjacent surviving squares); each surviving square must be covered by exactly one. n must be even (so the parity argument bites).