我想解决一个通过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),第二行是起点(例如11),第三行包含终点(例如20 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()
在我创建的求解器功能的迷宫类,它使用的self.endpoint获得端点和两个因为它乘以在文本文件中给出的数字只是一个数字,只能计算一个恒星可以容纳的点。另外两个称为setStar和setExplan的方法将空间设置为星号和解释标记。
def setStar(self,r,c):
self.reverselist[r][c] = '*'
def setExplan(self,r,c):
self.reverselist[r][c] = '!'
你怎么知道右上角是出口? – 2015-01-31 22:57:09
@EugeneK我用r ==(self.endpoint [0] * 2)和c ==(self.endpoint [1] * 2)。 self.endpoint发现端点的方法的一部分,因为它在文本文档的2行中给出。 – Liam87 2015-01-31 23:01:07
我们可能需要查看更多的代码。例如,'self.setExplan'是做什么的?一般来说,如果您可以提供足够的上下文来运行代码并确切知道它在做什么,这会很有帮助 - 请参阅[SSCCE](http://sscce.org/)。 – lvc 2015-01-31 23:07:39