如何用Python解决迷宫?

时间:2019-05-06 19:26:30

标签: python function solver maze

我正在尝试编写代码来解决基本迷宫,该迷宫由带有“#”表示墙壁“。”的列表组成。是自由空间,S是开始,E是结束。我的算法包括首先检查右边的空间是否空闲,如果不是,则检查该空间,然后向下,最后检查左边。我也意识到,如果出现死胡同,这会带来问题,但我稍后会担心。到目前为止,我有代码可以打印列表并找到起点的索引值为(2,0)。基本上,我想做的就是以该起始值作为defsolve函数的参数,然后遍历我的算法,同时将访问的位置标记为“ x” ...如果有意义的话。现在,我需要帮助的是使代码遍历我的算法,以便使用每个if语句更新位置。我当前的代码仅将'S'替换为'x'。

maze = [['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'],
        ['#', '.', '.', '.', '#', '.', '.', '.', '.', '.', '.', '#'],
        ['S', '.', '#', '.', '#', '.', '#', '#', '#', '#', '.', '#'], 
        ['#', '#', '#', '.', '#', '.', '.', '.', '.', '#', '.', '#'],
        ['#', '.', '.', '.', '.', '#', '#', '#', '.', '#', '.', 'E'],
        ['#', '#', '#', '#', '.', '#', '.', '#', '.', '#', '.', '#'],
        ['#', '.', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'],
        ['#', '#', '.', '#', '.', '#', '.', '#', '.', '#', '.', '#'],
        ['#', '.', '.', '.', '.', '.', '.', '.', '.', '#', '.', '#'],
        ['#', '#', '#', '#', '#', '#', '.', '#', '#', '#', '.', '#'],
        ['#', '.', '.', '.', '.', '.', '.', '#', '.', '.', '.', '#'],
        ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']]

def main():

    print_maze()
    start()
    solve(start())
    print_maze()

def print_maze():

    for r in range(0,len(maze)):
        for c in range(0,len(maze)):
            print(maze[r][c], end='')
        print('')

def start():

    find_value = 'S'
        for r in range(0,len(maze)):
            for c in range (0,len(maze)):
                if find_value in maze[r][c]:
                    return(r,c)
                    break

def solve(position):
    r = position[0]
    c = position[1]

    if maze[r+1][c] == '.':  
        maze[r][c] = 'x'
        return (r+1,c)
    elif maze[r][c+1] == '.':  
        maze[r][c] = 'x'
        return (r,c+1)     
    elif maze[r][c-1] == '.':  
        maze[r][c] = 'x'
        return (r,c-1)
    elif maze[r-1][c] == '.':  
        maze[r][c] = 'x'
        return (r-1,c)
    else:
        print('Route Error')


main()

1 个答案:

答案 0 :(得分:0)

变量“ r”超出了引发该异常的函数的范围(函数solve())。

您可以通过def solve(position)来更改def solve(r, c)