Generation of Combinatorial Objects · Backtracking

Lesson 4

Nikolai Chukhin · Alexander S. Kulikov

This allows us to immediately write a brute-force program.

from itertools import combinations, permutations


def is_solution(perm):
    return all(abs(i1 - i2) != abs(perm[i1] - perm[i2]) for i1, i2 in combinations(range(len(perm)), 2))


print(next(filter(is_solution, permutations(range(8)))))

(0, 4, 7, 5, 2, 6, 1, 3)

This program instantly finds a solution for \(n=8\). But for \(n=13\), it already takes noticeable time. Below, we use the backtracking method to speed up the program. The new version can instantly place queens on a \(20\times 20\) board.