Bonjour,
Je suis actuellement entrain de travailler sur un puzzle codingame ayant recours au backtracking.
Voici mon code actuel :
import sys
square = []
n = int(input())
for i in range(n):
row = input()
square.append([int(i) for i in row])
SQUARE_LEN = n*n
n_solutions = 0
def debug(*m):
print(*m,file = sys.stderr, flush = True)
def solve(p,n):
global n_solutions
if p >= SQUARE_LEN:
if n_solutions%100 == 0:
debug(n_solutions)
n_solutions += 1
return True
y = p//n
x = p%n
if square[y][x] > 0:
return solve(p+1,n)
forbidden = square[y] + [l[x] for l in square]
for i in range(1,n+1):
if not i in forbidden:
square[y][x] = i
solve(p+1,n)
square[y][x] = 0
return False
solve(0,n)
print(n_solutions)
Ma solution fonction pour tous les cas de tests sauf pour les deux derniers, pour lesquels mon programme est trop lent… Je suppose qu’il y a doit y avoir moyen d’optimiser encore la recherche, mais je ne vois pas comment je pourrais m’y prendre…
Merci d’avance !
+0
-0