Я пытаюсь решить лабиринт, который передается через текстовый файл с помощью python. Проблема, с которой я сталкиваюсь, заключается в том, что когда я бегу с помощью решателя, который использует рекурсию, он печатает любой возможный маршрут, но не меняет характер после обнаружения тупика.Python Maze Recursion
---------------------
|*************|*|***|
|-+-+-+*+-+-+*+*+*+-|
|***|***|***|*|*****|
|*+-+-+*+*+-+-+-+*+*|
|*******|*|*|*****|*|
|-+-+*+*+*+*+-+*+-+-|
|*****|*************|
|-+*+-+-+-+-+-+*+-+*|
|*****|*********|***|
---------------------
То, что я пытаюсь заставить его выглядеть следующим образом:
---------------------
|!!!!!!!!!!!!!|!|***|
|-+-+-+!+-+-+!+!+*+-|
|!!!|!!!|!!!|!|!!*!!|
|!+-+-+!+!+-+-+-+*+!|
|!!!!***|!|!|!!***|!|
|-+-+*+*+!+!+-+*+-+-|
|!!***|*********!!!!|
|-+*+-+-+-+-+-+!+-+!|
|***!!|!!!!!!!!!|!!!|
---------------------
Это то, что мой код выглядит следующим образом:
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
Edit: Извините за предоставление так мало и что делает это смущает, я постараюсь предоставить больше, чтобы разобраться.
Для этой программы мне предоставляется файл, который содержит три строки вверху. Первая строка - размер платы (например, 10 20), вторая - начальная точка (ex.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, чтобы получить конечную точку и умножает его на два, потому что число, указанное в текстовом файле, - это число, которое учитывает только пятна, в которые может поместиться звезда. Другие два метода называются setStar и setExplan, которые задают пространство звездочке и маркеровку.
def setStar(self,r,c):
self.reverselist[r][c] = '*'
def setExplan(self,r,c):
self.reverselist[r][c] = '!'
Как вы знаете, верхний правый - выход? –
@EugeneK Я использовал r == (self.endpoint [0] * 2) и c == (self.endpoint [1] * 2). self.endpoint часть метода, который находит конечную точку, как она указана в текстовом документе в 2 строке. – Liam87
Возможно, нам понадобится еще немного кода. Например, что делает 'self.setExplan'? В общем, полезно, если вы можете предоставить достаточно контекста, который мы можем * запустить * ваш код и убедиться в том, что он делает, - см. [SSCCE] (http://sscce.org/). – lvc