Python 迷宫递归



我正在尝试解决一个迷宫,该迷宫是通过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 类中创建的求解器函数中,它使用 self.endpoint 来获取端点并将其乘以 2,因为文本文件中给出的数字是一个只考虑星星可以容纳的点的数字。另外两个调用的方法有setStar和setExplan,它们将空间设置为星号和解释标记。

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

干杯

最新更新