Python 当迷宫没有解决方案时,如何处理或检测?

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函数不返回任何内容:打印出单路径解决方案 我已经成功地为迷宫编写了代码并获得了解决方案,但是当迷宫没有解决方案时,我遇到了一个问题。它不会停止,而是继续运行无限循环 下面是

我正在尝试用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]