Python 当迷宫没有解决方案时,如何处理或检测?
我正在尝试用python制作迷宫解算器 参数如下所示 y(int):y的起始位置 x(int):x的起始位置 对于大小为N×N的迷宫地图,起点为(y,x),左上、左下、右上和右下的坐标分别为(0,0)、(N,0)、(0,N)、(N,N) 搜索函数返回(bool):如果迷宫有解或没有解,则分别返回True或False solve函数不返回任何内容:打印出单路径解决方案 我已经成功地为迷宫编写了代码并获得了解决方案,但是当迷宫没有解决方案时,我遇到了一个问题。它不会停止,而是继续运行无限循环 下面是我的代码Python 当迷宫没有解决方案时,如何处理或检测?,python,algorithm,recursion,maze,Python,Algorithm,Recursion,Maze,我正在尝试用python制作迷宫解算器 参数如下所示 y(int):y的起始位置 x(int):x的起始位置 对于大小为N×N的迷宫地图,起点为(y,x),左上、左下、右上和右下的坐标分别为(0,0)、(N,0)、(0,N)、(N,N) 搜索函数返回(bool):如果迷宫有解或没有解,则分别返回True或False solve函数不返回任何内容:打印出单路径解决方案 我已经成功地为迷宫编写了代码并获得了解决方案,但是当迷宫没有解决方案时,我遇到了一个问题。它不会停止,而是继续运行无限循环 下面是
class Maze():
def __init__(self, grid):
self.grid = grid
def search(self, y, x):
self.y = y
self.x = x
if x == len(self.grid[0]) or y == len(self.grid):
print('out of maze')
return False
if self.grid[y][x] == 'F':
self.cleanup()
return True
if self.grid[y][x] != 'o' and self.grid[y][x] != ' ':
print('ran into a wall')
return False
self.grid[y][x] = ' '
if x <= len(self.grid[0])-2:
if self.grid[y][x+1] == 'o' or self.grid[y][x+1] == 'F':
print(x,y)
return self.search(y,x+1)
if y <= len(self.grid)-2:
if self.grid[y+1][x] == 'o' or self.grid[y+1][x] == 'F':
print(x,y)
return self.search(y+1,x)
if x > 1:
if self.grid[y][x-1] == 'o' or self.grid[y][x-1] == 'F':
print(x,y)
return self.search(y,x-1)
if y > 1:
if self.grid[y-1][x] == 'o' or self.grid[y-1][x] == 'F':
print(x,y)
return self.search(y-1,x)
if x > 1:
if self.grid[y][x-1] == ' ' or self.grid[y][x-1] == 'F':
print(x,y)
return self.search(y,x-1)
if y > 1:
if self.grid[y-1][x] == ' ' or self.grid[y-1][x] == 'F':
print(x,y)
return self.search(y-1,x)
if x <= len(self.grid[0])-2:
if self.grid[y][x+1] == ' ' or self.grid[y][x+1] == 'F':
print(x,y)
return self.search(y,x+1)
if y <= len(self.grid)-2:
if self.grid[y+1][x] == ' ' or self.grid[y+1][x] == 'F':
print(x,y)
return self.search(y+1,x)
print("can't find a way")
return False
def cleanup(self):
for r in range(len(self.grid)):
for c in range(len(self.grid[0])):
if self.grid[r][c] == ' ':
self.grid[r][c] = 'o'
def solve(self, y, x):
if self.search(y, x):
print("Solution")
### CODE HERE ###
else:
print('There are NO solutions')
这是我无法处理的网格
.
.
grid2 = ['o o o o o o'.split(' '),
'+ + o + + +'.split(' '),
'F + o o o o'.split(' '),
'o o + + + o'.split(' '),
'o o o + + o'.split(' ')]
.
.
.
maze_map_list = [grid1, grid2, grid3, grid4]
为了确保我理解,
'
表示已经尝试过的位置,'o'
表示尚未尝试过的开放空间?是否有帮助?如果search()
返回False
请不要调用solve()
。另一方面,如果它返回True
,则可以通过与search()
确定存在一个类似的方式找到解决方案。@KarlKnechtel是的,您是对的!我会尽力理解维基页面。@martineau我不太明白。那么你的意思是我不应该在solve函数中调用search吗?为了确保我理解,'
表示已经尝试过的位置,'o'
表示尚未尝试过的开放空间?是否有帮助?如果search()
返回False
不要调用solve()
。另一方面,如果它返回True
,则可以通过与search()
确定存在一个类似的方式找到解决方案。@KarlKnechtel是的,您是对的!我会尽力理解维基页面。@martineau我不太明白。你是说我不应该在solve函数中调用search?
.
.
grid2 = ['o o o o o o'.split(' '),
'+ + o + + +'.split(' '),
'F + o o o o'.split(' '),
'o o + + + o'.split(' '),
'o o o + + o'.split(' ')]
.
.
.
maze_map_list = [grid1, grid2, grid3, grid4]