1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| def dames(N = 8, n = 0, x = [0], a = None): # n = profondeur de recherche, a = "échiquier"
if a is None :
if N < 4 or N > 12: N = 8
a = [0] * N
if n >= N: # affichage d'une solution
x[0] += 1 # et comptage du nombre de solution
#return # pour ne faire que compter les solutions
print(f"\n N°{x[0]} - {''.join(map(str,a))}")
print('┌', '───┬'*(N-1), '───┐', sep='')
for u in range(N): # lignes
for z in range(N): # colonnes
if a[u] == z:
b=['│ ']*N
b[z]='│ * '
print(*b, sep='', end='│\n')
if u < N-1: print('├', '───┼'*(N-1), '───┤', sep='')
# ou b=['·']*N; b[z]='*'; print(*b)
break
print('└', '───┴'*(N-1),'───┘',sep='')
return
for a[n] in range(N): # colonnes
if not any(a[n] == a[z] or abs(a[n] - a[z]) == n - z for z in range(n)):
dames(N, n+1, x, a) # c'est ok, on poursuit
"""
valid = True # validité par défaut
for z in range(n): # lignes
if a[n] == a[z] or abs(a[n] - a[z]) == n - z:
valid = False # invalide
break
if valid: dames(N, n+1, x, a) # c'est ok, on poursuit
"""
return x[0]
print('\n',dames(8),'solutions') |
Partager