我的算法返回未解决的答案。我该如何解决?
My algorithm is returning unsolved answers. How do I fix this?
我正在尝试创建一个采用 numpy 数组和 returns 正确答案的数独求解器。但是,目前,我尝试的任何 numpy 数组 return 都是未解决的答案。
我认为问题在于:
return
solved = puzzle.copy()
solver(puzzle)
但是,我想不通到底是为什么。在上面的代码中,我试图存储解决方案。不过,很明显我没有正确执行此操作,或者我试图在错误的地方执行此操作。
我应该怎么做才能正确 return 解决难题?
完整代码段如下:
def solver(puzzle):
empty_cell = find_empty(puzzle)
if not empty_cell:
return True
else:
for num in range(1, 10):
if valid(puzzle, num, empty_cell):
puzzle[empty_cell[0]][empty_cell[1]] = num
if solver(puzzle):
return
solved = puzzle.copy()
solver(puzzle)
puzzle[empty_cell[0]][empty_cell[1]] = 0
return False
正如 Szala 在评论中所说,您在 return 语句之后有代码永远不会执行。既然你想 return 正确地拼图,试试这个:
def solver(puzzle):
empty_cell = find_empty(puzzle)
if not empty_cell:
return puzzle.copy()
else:
for num in range(1, 10):
if valid(puzzle, num, empty_cell):
puzzle[empty_cell[0]][empty_cell[1]] = num
returned_value = solver(puzzle)
if not returned_value is False:
return returned_value
puzzle[empty_cell[0]][empty_cell[1]] = 0
return False
我正在尝试创建一个采用 numpy 数组和 returns 正确答案的数独求解器。但是,目前,我尝试的任何 numpy 数组 return 都是未解决的答案。
我认为问题在于:
return
solved = puzzle.copy()
solver(puzzle)
但是,我想不通到底是为什么。在上面的代码中,我试图存储解决方案。不过,很明显我没有正确执行此操作,或者我试图在错误的地方执行此操作。
我应该怎么做才能正确 return 解决难题?
完整代码段如下:
def solver(puzzle):
empty_cell = find_empty(puzzle)
if not empty_cell:
return True
else:
for num in range(1, 10):
if valid(puzzle, num, empty_cell):
puzzle[empty_cell[0]][empty_cell[1]] = num
if solver(puzzle):
return
solved = puzzle.copy()
solver(puzzle)
puzzle[empty_cell[0]][empty_cell[1]] = 0
return False
正如 Szala 在评论中所说,您在 return 语句之后有代码永远不会执行。既然你想 return 正确地拼图,试试这个:
def solver(puzzle):
empty_cell = find_empty(puzzle)
if not empty_cell:
return puzzle.copy()
else:
for num in range(1, 10):
if valid(puzzle, num, empty_cell):
puzzle[empty_cell[0]][empty_cell[1]] = num
returned_value = solver(puzzle)
if not returned_value is False:
return returned_value
puzzle[empty_cell[0]][empty_cell[1]] = 0
return False