有几个与此类似的迷宫问题,但没有一个真正涉及为什么它不起作用的问题。
我不需要确切的答案。我只需要知道为什么这个特殊的东西不起作用。
这是我需要帮助的班级迷宫中的一部分。
ysize
是10 xsize
是10 xend
是20(将结果更改为19,并且没有绘制任何内容)yend
是10(将其更改为9也是如此)class Maze:
def __init__(self):
self.maze = []
self.xstart = None
self.ystart = None
self.xend = None
self.yend = None
self.xsize = None
self.ysize = None
def read_maze(self, filename):
maze_list = []
f_maze = open(filename)
size = f_maze.readline().split() #
start = f_maze.readline().split() #
end = f_maze.readline().split() #
self.xstart = int(start[1])
self.ystart = int(start[0])
self.xend = (int(end[1])*2)
self.yend = (int(end[0])*2)
self.xsize = (int(size[1])*2)
self.ysize = (int(size[0])*2)
lines = f_maze.readlines()
for line in lines:
maze_list.append(list(line[:len(line)]))
self.maze = maze_list # Assigns to class
def __str__(self):
return ("".join(''.join(line) for line in self.maze))
def solve(self, x, y):
if y > (self.ysize) or x > (self.xsize):
print("1")
return False
if self.maze[y][x] == self.maze[self.yend][self.xend]:
print("2")
return True
if self.maze[y][x] != " ":
print("3")
return False
self.maze[y][x] = "o" # MARKING WITH o for path already taken.
if self.solve(x+1,y) == True:
return True
elif self.solve(x,y+1) == True:
return True
elif self.solve(x-1,y) == True:
return True
elif self.solve(x,y-1) == True:
return True
self.maze[y][x] = " " # ELSE I want it to be replaced with space
return False
这是当前结果。
---------------------
|ooooooooooooo| | |
|-+-+-+ +-+-+o+ + +-|
| | | |o| |
| +-+-+ + +-+-+-+ + |
| | | | | |
|-+-+ + + + +-+ +-+-|
| | |
|-+ +-+-+-+-+-+ +-+ |
| | | |
---------------------
我想要这样:
---------------------
|ooooooo | | |
|-+-+-+o+-+-+ + + +-|
| | o| | | |
| +-+-+o+ +-+-+-+ + |
| o| | | | |
|-+-+ +o+ + +-+ +-+-|
| |ooooooooooooo|
|-+ +-+-+-+-+-+ +-+o|
| | | o|
---------------------
我很抱歉在这里无法解决缩进格式。那是我的全部代码。这些是我的测试语句:
maze = Maze()
maze.read_maze(filename)
maze.solve(maze.xstart, maze.ystart)
print(maze)
文件以这种格式保存为.txt文件。
5 10
1 1
5 10
---------------------
| | | |
|-+-+-+ +-+-+ + + +-|
| | | | | |
| +-+-+ + +-+-+-+ + |
| | | | | |
|-+-+ + + + +-+ +-+-|
| | |
|-+ +-+-+-+-+-+ +-+ |
| | | |
---------------------
答案 0 :(得分:1)
问题在于,当文件站立时,xend, yend
是(10, 20)
。要调试为什么它不起作用,您可以print(self.maze[self.yend][self.xend])
返回破折号"-"
。现在,当递归调用的(x, y)
对达到第一个破折号时,它将测试True
的行
if self.maze[y][x] == self.maze[self.yend][self.xend]:
并认为它已经解决了迷宫问题。相反,我们要测试
if (y, x) == (self.yend, self.xend):
也就是说,测试坐标,而不是平方的值。
另一点:检查目标的实际位置,我们看到它在这里:
+-+ +-+ |
| |
--------- <= this corner is the goal!
如果严格按照基本方向移动,将无法到达。将目标向上或向左移动一个正方形会将其置于求解器算法的范围之内。
这足以使代码对我有用,并且希望足以使您再次行动。