我想解決一個通過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