Python 只打印迷宫的正确路径

Python 只打印迷宫的正确路径,python,python-3.x,Python,Python 3.x,ı有一些递归求解迷宫的代码。在列表列表中,“x”表示路径,“w”表示墙,“+”表示访问的单元。我只想写正确的路径,但我的函数会写每一条路径,即使它是一条死胡同。你能告诉我我在这里遗漏了什么吗?下面你可以看到我的一些代码: mainMaze = [['W', 'W', 'P', 'W', 'W', 'W'], ['W', 'W', 'P', 'W', 'P', 'S'], ['W', 'W', 'P', 'W', 'P', '

ı有一些递归求解迷宫的代码。在列表列表中,“x”表示路径,“w”表示墙,“+”表示访问的单元。我只想写正确的路径,但我的函数会写每一条路径,即使它是一条死胡同。你能告诉我我在这里遗漏了什么吗?下面你可以看到我的一些代码:

    mainMaze = [['W', 'W', 'P', 'W', 'W', 'W'],
                ['W', 'W', 'P', 'W', 'P', 'S'],
                ['W', 'W', 'P', 'W', 'P', 'W'],
                ['P', 'P', 'P', 'P', 'P', 'W'],
                ['F', 'W', 'P', 'W', 'W', 'W'],
                ['W', 'P', 'P', 'P', 'P', 'W']]


    def printMaze(maze):
        for line in maze:
            for element in line:
                print(element, end=" ")
            print()


    def pathCheck(row, col):
        print(str(row) + "," + str(col))
        if mainMaze[row][col] == "F":  # F is exit
            mainMaze[i][j] == "0"
            return True
        elif mainMaze[row][col] == "W":  # W is wall
            return False
        elif mainMaze[row][col] == "+":  # + is visited
            return False
        elif mainMaze[row][col] == "P":  # + is visited
            mainMaze[row][col] = "+"
        mainMaze[i][j] == "0"
        if ((row < len(mainMaze) - 1 and pathCheck(row + 1, col))
                or (col > 0 and pathCheck(row, col - 1))
                or (row > 0 and pathCheck(row - 1, col))
                or (col < len(mainMaze) - 1 and pathCheck(row, col + 1))):
            return True

        return False


    for i in range(len(mainMaze)):
        for j in range(len(mainMaze)):
            if mainMaze[i][j] == "S":
                a, k = i, j
    pathCheck(a, k)
    printMaze(mainMaze)
mainMaze=[[W',W',P',W',W',W'],
[W',W',P',W',P',S'],
[W',W',P',W',P',W'],
[P',P',P',P',P',P',W'],
[F',W',P',W',W',W'],
['W','P','P','P','P','W']
def打印迷宫(迷宫):
对于迷宫中的线:
对于行中的元素:
打印(元素,结束=“”)
打印()
def路径检查(行、列):
打印(str(行)+“,”+str(列))
如果mainMaze[row][col]=“F”:#F退出
mainMaze[i][j]=“0”
返回真值
elif mainMaze[row][col]=“W”:#W是墙
返回错误
elif mainMaze[row][col]=“+”:#+已被访问
返回错误
elif mainMaze[row][col]=“P”:#+已被访问
主迷宫[行][列]=“+”
mainMaze[i][j]=“0”
if((行<列(主迷宫)-1和路径检查(行+1,列))
或(列>0和路径检查(行,列-1))
或(行>0和路径检查(行-1,列))
或(列<列(主迷宫)-1和路径检查(行,列+1)):
返回真值
返回错误
对于范围内的i(len(mainMaze)):
对于范围内的j(len(mainMaze)):
如果mainMaze[i][j]=“S”:
a、 k=i,j
路径检查(a,k)
打印迷宫(主迷宫)

如前所述,如果您提供一个完全有效的示例,您将获得更准确的答案,而且可能会更快

无论如何,我做了一些猜测,我希望这是您的用例

如果在
路径检查的开头添加
print(str(row)+“,“+str(col))
,您将看到哪里出了问题

现在考虑一下:

mainMaze = [
    ["X", "X", "A"],
    ["W", "X", "X"],
    ["W", "X", "G"]
]
def pathCheck(row, col):
    print(str(row) + "," + str(col))
    if mainMaze[row][col] == "G":  # F is exit
        return True
    elif mainMaze[row][col] == "W":  # W is wall
        return False
    elif mainMaze[row][col] == "+":  # + is visited
        return False
    elif mainMaze[row][col] == "X":  # X is path
        mainMaze[row][col] = "+"

    if ((row < len(mainMaze) - 1 and pathCheck(row + 1, col))
            or (col > 0 and pathCheck(row, col - 1))
            or (row > 0 and pathCheck(row - 1, col))
            or (col < len(mainMaze) - 1 and pathCheck(row, col - 1))
            or (col < len(mainMaze) - 1 and pathCheck(row, col + 1))):
        return True
    return False
负索引将变为(0,2),在这种情况下,将转换为(0,2)。它会产生不想要的结果

原因是
col
,其中如果
col
为0,则满足第一个条件,然后它将到达(row,-1)


如果这不是您的代码中的问题(这肯定是一个编码问题和潜在的bug),那么您需要发布一个完整的示例,包括矩阵。

您是否也可以发布打印功能?此外,最后一次检查中的第四条语句未添加correctprint函数。先生,你能解释一下为什么这是错误的吗?你应该提供一个有效的例子来获得你需要的帮助:张贴你在问题中提到的例子。应该有一个例子,您发现您的代码正在打印所有路径
0,0
1,0
0,-1 // wrong
0,1
1,1
2,1
2,0
1,1
2,0
2,2