İki klassik tapmaca yaxşı budamanın nə qədər vacib olduğunu göstərir. Hər ikisi əvvəlki dərsdəki şablonu izləyir: seç, araşdır, ləğv et.
N vəzir
n x n lövhədə n vəziri elə yerləşdirin ki, heç biri eyni sətirdə, sütunda və ya diaqonalda olmasın. Hər sətirdə düz bir vəzir olur, ona görə sətirləri bir-bir doldurur və sütun seçirik. Konfliktləri üç çoxluqla O(1)-də yoxlayırıq:
cols: tutulmuş sütunlar;diag1:row - coldəyərləri (bir istiqamətli diaqonallar);diag2:row + coldəyərləri (digər istiqamət).
Eyni diaqonaldakı bütün xanaların row - col (və ya row + col) dəyəri eynidir, ona görə çoxluqda yoxlama kifayətdir.
def solve_queens(n):
cols, diag1, diag2 = set(), set(), set()
placement, solutions = [], []