我已经编写了以下代码,以通过回溯方法解决数独游戏。可以打印正确的结果,但是我还没有找到一种方法来获得与返回值相同的结果,而不是打印它。如何更改程序才能使其正常工作?
import numpy as np
def find_possible(sudoku,r,c):
"""returns the possible Values as numpy array for a given position"""
position = sudoku[r, c]
if position == 0:
line = sudoku[r, :]
column = sudoku[: ,c]
r0 = (r//3)*3
c0 = (c//3)*3
square = sudoku[r0:r0+3,c0:c0+3]
numbers = np.arange(1, 10)
blocked_numbers = np.unique(np.append(np.append(line,column),square))
return np.setdiff1d(numbers,blocked_numbers)
else: return np.array([])
def backtrack(sudoku):
"""solve the game with the backtracking method"""
for r in range(9):
for c in range(9):
list_of_possible = find_possible(sudoku,r, c)
if sudoku[r,c] == 0:
for i in range(len(list_of_possible)):
sudoku[r,c] = list_of_possible[i]
backtrack(sudoku)
sudoku[r,c] = 0
return
result = sudoku
print(result)
table = np.array([[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 4, 1, 9, 0, 0, 5],
[0, 0, 0, 0, 8, 0, 0, 7, 9]])
backtrack(table)
您需要使用return
语句。代替print(result)
,使用return result