首页 > 解决方案 > 仅打印迷宫的正确路径

问题描述

我有一些递归解决迷宫的代码。在列表列表中,“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)

标签: pythonpython-3.x

解决方案


如前所述,如果您提供一个完整的工作示例,您将获得更准确的答案并且可能更快。

无论如何,我做了几个猜测,我希望这是你的用例。

如果您print(str(row) + "," + str(col))在开头添加pathCheck,您将看到有什么问题。

现在考虑一下:

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,0
1,0
0,-1 // wrong
0,1
1,1
2,1
2,0
1,1
2,0
2,2

负索引将变为并且在这种情况下被转换为 (0,2)。它会产生不想要的结果。

原因是col < len(mainMaze) - 1 and pathCheck(row, col - 1)如果col为 0 则满足第一个条件,然后它将到达(行,-1)。

如果这不是您的代码中的问题(这绝对是一个编码问题和潜在的错误),那么您需要发布一个包含矩阵的完整示例。


推荐阅读