问题描述
最近,我已经找到了关于回溯的知识,而书中的人却显示了Sudoku的一些回溯窍门(https://www.youtube.com/watch?v=G_UYXzGuqvM&ab_channel=Computerphile。对此,我没有太多的思考。不幸的是,我陷入了第一个回溯问题而没有解决方案。
相应地提出问题: 使用回溯来计算从左下角到右上角的所有路径的数量 x * y网格。其中包括https://imgur.com/3t3Np4M之类的路径。请注意,每个点只能访问一次。编写一个函数np(x,y),该函数返回x * y网格中的路径数。例如。 np(2,3)应该返回38。提示:创建一个布尔值网格,在其中标记已访问的位置。
无论我在这段简短的代码段中进行了什么更改,我都无法登陆38。
```
grid = [[0,1],[0,0],[1,0]]
solution = 0
def number_of_paths(x,y):
global solution
global grid
for i in range(0,x):
for j in range(0,y):
if grid[i][j] == 0:
grid[i][j] = 1
number_of_paths(x,y)
grid[i][j] = 0
solution += 1
return
if __name__ == '__main__':
number_of_paths(2,3)
print(grid)
print(solution)```
这是带有Sudoku求解器的示例解决方案。
```
grid = [[5,3,7,[6,1,9,5,8,6,[8,3],[4,[7,2,6],4,5],9]]
import numpy as np
def possible(y,x,n):
global grid
for i in range(0,9):
if grid[y][i] == n:
return False
for i in range(0,9):
if grid[i][x] == n:
return False
x0 = (x // 3) * 3
y0 = (y // 3) * 3
for i in range(0,3):
for j in range(0,3):
if grid[y0 + i][x0 + j] == n:
return False
return True
def solve():
global grid
for y in range(9):
for x in range(9):
if grid[y][x] == 0:
for n in range(1,10):
if possible(y,n):
grid[y][x] = n
solve()
# backtracking - bad choice
grid[y][x] = 0
return
print(np,matrix(grid))
input("More?")```
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)