У меня есть следующая функция, она используется для решения сетки судоку. Как я могу изменить код так, чтобы он возвращал решенную матрицу, чтобы я мог использовать его для чего-то другого, а не только для печати? Функция в основном использует рекурсию, чтобы опробовать все возможные решения для сетки судоку, и заполняет число, если оно принадлежит определенной позиции. источник: https://www.youtube.com/watch?v=G_UYXzGuqvM&t=455s
matrix = np.array([[9,0,7, 1,0,0, 0,0,0],
[0,0,0, 0,0,0, 0,0,0],
[5,0,0, 3,0,0, 0,6,9],
[0,0,1, 6,5,0, 8,0,0],
[0,3,0, 0,8,0, 0,4,0],
[0,0,6, 0,3,9, 1,0,0],
[4,2,0, 0,0,6, 0,0,8],
[0,0,0, 0,0,0, 0,0,0],
[0,0,0, 0,0,2, 5,0,7]])
def grid(i,j): # function which splits the matrix up into 9 grids
if i < 3 and j < 3:
return matrix[0:3,0:3]
elif i < 3 and 3 <= j < 6 :
return matrix[0:3,3:6]
elif i < 3 and 6 <= j < 9 :
return matrix[0:3,6:9]
elif 3 <= i < 6 and j < 3 :
return matrix[3:6,0:3]
elif 3 <= i < 6 and 3 <= j < 6 :
return matrix[3:6,3:6]
elif 3 <= i < 6 and 6 <= j < 9:
return matrix[3:6,6:9]
elif 6 <= i < 9 and j < 3 :
return matrix[6:9,0:3]
elif 6 <= i < 9 and 3 <= j < 6 :
return matrix[6:9,3:6]
elif 6 <= i < 9 and 6 <= j < 9 :
return matrix[6:9,6:9] #
def possible(i,j,n): # function which tells us if a number is possible in a certain position
if all(matrix[i][m] != n and matrix[m][j] != n for m in range(9)) and n not in grid(i,j):
return True
else:
return False
def solve(): # function which solves the puzzle and fills in correct digits
global matrix
for i in range(9):
for j in range(9):
if matrix[i][j] == 0:
for n in range(1,10):
if possible(i,j,n):
matrix[i][j] = n
solve()
matrix[i][j] = 0
return
print(matrix)
solve()
Я пытался использовать return matrix
, но это просто возвращает исходную матрицу