Python 迷宫递归

Python Maze Recursion

我正在尝试解决一个通过 python 文本文件给出的迷宫。我 运行 遇到的问题是,当我 运行 通过使用递归的求解器时,它会打印所有可能的路线,但在找到死胡同后不会更改字符。

---------------------
|*************|*|***|
|-+-+-+*+-+-+*+*+*+-|
|***|***|***|*|*****|
|*+-+-+*+*+-+-+-+*+*|
|*******|*|*|*****|*|
|-+-+*+*+*+*+-+*+-+-|
|*****|*************|
|-+*+-+-+-+-+-+*+-+*|
|*****|*********|***|
---------------------

我想让它看起来像什么:

---------------------
|!!!!!!!!!!!!!|!|***|
|-+-+-+!+-+-+!+!+*+-|
|!!!|!!!|!!!|!|!!*!!|
|!+-+-+!+!+-+-+-+*+!|
|!!!!***|!|!|!!***|!|
|-+-+*+*+!+!+-+*+-+-|
|!!***|*********!!!!|
|-+*+-+-+-+-+-+!+-+!|
|***!!|!!!!!!!!!|!!!|
---------------------

我的代码是这样的:

def solver(self,r,c):
    if r == (self.endpoint[0]*2) and c == (self.endpoint[1]*2):
        return True
    if self.reverselist[r][c] != ' ':
        return False

    self.setStar(r,c)
    if self.solver(r-1,c):
        self.setExplan(r,c)
        return True
    if self.solver(r,c+1):
        self.setExplan(r,c)
        return True
    if self.solver(r,c-1):
        self.setExplan(r,c)
        return True 
    if self.solver(r+1,c):
        self.setExplan(r,c)
        return True


    return False

编辑: 很抱歉提供的内容太少而造成混淆,我会尝试提供更多内容来解决问题。

所以对于这个程序,我提供了一个文件,它在顶部包含三行。第一行是棋盘的大小(例如 10 20),第二行是起点(例如 1 1),第三行是终点(例如 10 20)。在这三行之后,它包含一个使用 -,+,| 的空迷宫作为墙壁。

这是我在一个单独的函数中调用的 运行 一切

def main():
    file_choice = input('Enter files name: ')
    lines = open_file('maze510') #change back after !!!!!
    mymaze = Maze(lines)
    start = mymaze.getStart(lines)
    end = mymaze.getEnd(lines)
    mymaze.solver(start[0],start[1])
    mymaze.displaymaze()

在我在 Maze class 中创建的解算器函数中,它使用 self.endpoint 获取端点并将其乘以二,因为文本文件中给出的数字是仅只考虑星星可以容纳的位置。调用的其他两个方法是 setStar 和 setExplan,它们将 space 设置为星星和解释标记。

def setStar(self,r,c):
        self.reverselist[r][c] = '*'

def setExplan(self,r,c):
        self.reverselist[r][c] = '!'

从未使用过 Python,所以 运行 没有使用过,但在我看来,您的求解器函数中需要如下内容:

if r == (self.endpoint[0]*2) and c == (self.endpoint[1]*2):
    return True
if self.reverselist[r][c] != ' ':
    return False

# mark the current attempt as on the route
self.setStar(r,c)

# don't need to setStar or setExplan anywhere while
# trying moves - the recursive functions will do that
if self.solver(r-1,c):
    return True
if self.solver(r,c+1):
    return True
if self.solver(r,c-1):
    return True 
if self.solver(r+1,c):
    return True

# if we reach here then there is no solution found from
# the current r, c so mark it as ! for backtracking
self.setExplan(r,c)

return False

干杯,