您好,我发现这个代码来解决这样的迷宫:在python解决迷宫
+-+-+-+-+-+-+-+-+-+-+
| | | | |
S +-+-+-+-+ + +-+ + +
| | | | |
+-+-+-+ +-+ +-+-+-+ +
| | | | |
+ + + + + +-+ +-+-+-+
| | | | | | |
+ + +-+ +-+-+ + + + +
| | | | | | | |
+ +-+ + + + + +-+-+-+
| | | | | |
+ + +-+-+-+ + +-+-+ +
| | | | |
+ +-+-+ +-+-+ +-+-+-+
| | | | | |
+ + + +-+-+-+-+ + +-+
| | | | | | |
+ + + + + + +-+-+-+ +
| | | E
+-+-+-+-+-+-+-+-+-+-+
这是代码:
def read_maze(fname):
mz = []
with open(fname, 'U') as f:
for r in f:
mz.append(list(r.replace('\n', '')))
return mz
PATH, START, EXIT, VISITED, SOLUTION = " SE.o"
class Maze():
def __init__(self,maze):
self.maze = maze
self.start_y = [row.count(START) for row in self.maze].index(1)
self.start_x = self.maze[self.start_y].index(START)
def __repr__(self):
return "\n".join("".join(row)for row in self.maze)
def solve(self, x=None, y=None):
if x==None:
x, y = self.start_x,self.start_y
if self.maze[y][x] in (PATH,START):
self.maze[y][x] = VISITED
if self.solve(x+1,y) or self.solve(x-1,y) or self.solve(x,y+1) or self.solve(x,y-1):
self.maze[y][x]=SOLUTION
return True
elif self.maze[y][x] == EXIT:
return True
return False
maze = read_maze("maze.txt")
mz = Maze(maze)
print (mz)
print ("-----------------------------")
if mz.solve():
print(mz)
谁能帮助我了解递归函数求解() ?
首先检查当前位置是否在PATH或START中,第一个显然是START,在我们的情况下是(x = 0; y = 2)。所以代码将其标记为访问
我不完全明白的是该程序接下来做什么?有一个if条件,检查的第一个选项是self.solve(x + 1,y) - 在这种情况下,我们会向右,这是一个空闲位置,并且位于PATH中(因此我们将其标记为VISITED) ,但是(x + 1 + 1,y)不是,所以我们传递给or的第二个值(即(x-1,y),所以我们再次获得(x + 1 +(1-1),y) =(X + 1,Y),现在我们传递给第三(X,Y + 1),所以我们下去等
难道是正确的,我迷路了一下。
假设你写了这段代码,为什么你不明白它? –
@ cricket_007,他们没有:他们说他们已经在帖子开头的某个地方找到了该代码。 – ForceBru
我写了“我找到了代码”,我需要一个完整的理解 –