def sudoku(n): GC = [[list(range(n))]] for i in range(1,n): GN = [] for M in GC: DM = [] # contiendra les P-S enfantés par M gc = [[i]] for j in range(1,n): gn = [] for L in gc: DL = [] # contiendra les P-L enfantées par L support = set(range(n)) - set(L) support = support - {M[i][j] for i in range(0,i)} for k in support: DL = DL + [L+[k]] # L+[k] est un enfant de L gn = gn + DL gc = gn for L in gc: DM = DM + [M+[L]] # M+[L] est un enfant de M GN = GN + DM GC = GN return GC