python - 我的算法返回未解决的答案。我该如何解决?
问题描述
我正在尝试创建一个采用 numpy 数组并返回正确答案的数独求解器。但是,目前,我尝试的任何 numpy 数组都会返回未解决的答案。
我认为问题在于:
return
solved = puzzle.copy()
solver(puzzle)
但是,我无法弄清楚究竟是为什么。在上面的代码中,我试图存储解决方案。不过,很明显我没有正确执行此操作,或者我试图在错误的地方执行此操作。
我应该怎么做才能正确返回已解决的难题?
下面的完整代码段:
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 语句之后有永远不会执行的代码。由于您想正确返回拼图,请尝试以下操作:
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
推荐阅读
- reactjs - 如何直接在jsx“src”中发出http请求
- python - 删除 pandas 数据框中 2 列中包含重复值的行
- bash - 无法从 $ 获得正确的退出代码?
- linux - udpsink 似乎没有流任何东西,但 fileink 工作
- gis - 在 Repast Simphony 中读取并显示 1 个或多个光栅文件
- python - AttributeError: 'StringVar' 对象没有属性 'encode'
- javascript - 如何使 SELECT 标记更改 URL
- postgresql - 如何在运行的 docker-compose 容器中使用 /var/run/docker.sock?
- php - 我想从数据库中查询注册号是用来登录的?
- javascript - 从另一个数组中存在的对象数组中删除对象