Python中的回溯pathinding问题

问题描述

最近,我已经找到了关于回溯的知识,而书中的人却显示了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 (将#修改为@)