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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| import numpy as np
grid = [[1,2,3,4,5,6,7,8,9],
[4,5,6,7,8,9,1,2,3],
[0,8,9,0,2,3,4,5,6],
[0,1,2,3,4,5,6,7,8],
[3,4,5,6,7,8,0,1,2],
[6,0,8,9,1,2,3,4,5],
[8,9,1,2,3,4,5,6,7],
[2,3,4,0,6,7,8,9,1],
[5,6,7,8,9,1,2,3,0]]
def n_valide(y, x, n):
"""Détermine si un nombre n peut être mis sur une case à la colonne x et à la ligne"""
global grid
#On détermine si le nombre est valide sur sa ligne
for x0 in range(len(grid)):
if grid[y][x0] == n:
return False
#On détermine si le nombre est valide sur sa colonne
for y0 in range(len(grid)):
if grid[y0][x] == n:
return False
x0 = (x//3) * 3
y0= (y//3) * 3
#On détermine si le nombre est valide dans sa sous-grille 3x3
for i in range(0,3):
for j in range(0,3):
if grid[y0+i][x0+j] == n:
return False
return True
def gcount(val):
global grid
c=0
for i in range(len(grid)):
c=c+grid[i].count(val)
return c
def solve():
global grid
for y in range(9):
for x in range(9):
if grid[y][x] == 0:
for n in range(1,10):
if n_valide(y, x, n):
grid[y][x] = n
solve()
if gcount(0)==0 : return
print("passage à 0")
grid[y][x] = 0
return
# je "désactive" la partie affichage et sortie du code source
# for i in range(9):
# for j in range(9):
# print(grid[i][j], end="")
# print()
# print("fin")
# exit(0)
solve() #appel de la fonction de résolution
#affichage
for i in range(9):
for j in range(9):
print(grid[i][j], end="")
print()
print("fin") |
Partager