В рекурсивном псевдокоде:
minQueensNeeded = ∞
procedure placeQueens():
if all black pieces are under attack:
minQueensNeeded = min(minQueensNeeded, number of queens on the board)
else:
for each black piece B that is not under attack:
for each square S from which B can be captured:
place a queen at S
placeQueens()
remove the queen at S
Обратите внимание, что он будет посещать одну и ту же ситуацию более одного раза, потому что королевы могут быть расположены в произвольном порядке. Это не влияет на ответ, но не очень хорошо для производительности. Вы можете исправить это, только поместив новые королевы в квадраты, которые следуют за последней королевой в порядке чтения.