Generation of Combinatorial Objects · Backtracking
Lesson 4
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.