python迷宫问题的所有路径
时间: 2023-08-04 09:19:51 浏览: 96
Python 实现递归法解决迷宫问题的示例代码
好的,我可以为您提供一个简单的 Python 解法:
假设迷宫是一个二维列表,其中 0 表示可以通过的路径,1 表示障碍物。我们可以使用深度优先搜索算法来查找所有可行路径。具体实现如下:
```python
def find_paths(maze):
paths = []
visited = set()
def dfs(i, j, path):
if i < 0 or i >= len(maze) or j < 0 or j >= len(maze[0]) or maze[i][j] == 1 or (i, j) in visited:
return
if i == len(maze) - 1 and j == len(maze[0]) - 1:
paths.append(path)
return
visited.add((i, j))
dfs(i+1, j, path + [(i+1, j)])
dfs(i-1, j, path + [(i-1, j)])
dfs(i, j+1, path + [(i, j+1)])
dfs(i, j-1, path + [(i, j-1)])
visited.remove((i, j))
dfs(0, 0, [(0, 0)])
return paths
```
在上述代码中,我们定义了一个 `find_paths` 函数,它接收一个迷宫二维列表作为输入,并返回所有可行路径的列表。在函数内部,我们使用了一个嵌套的 `dfs` 函数来进行深度优先搜索。`dfs` 函数接收三个参数:当前位置的行数 `i`、列数 `j`,以及当前路径 `path`。如果当前位置超出了迷宫的范围、是障碍物或者已经被访问过了,则直接返回。如果当前位置是终点,则将当前路径添加到结果列表中。否则,我们将当前位置标记为已访问,然后继续向四个方向递归搜索,直到找到一条可行路径或者搜索完所有路径。最后,我们将当前位置的访问标记移除。
如果您想对上述代码进行测试,可以使用以下迷宫作为输入:
```python
maze = [[0, 1, 0, 0],
[0, 0, 0, 1],
[1, 0, 0, 0],
[0, 1, 1, 0]]
```
这个迷宫有两条可行路径:`[(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (2, 3), (3, 3)]` 和 `[(0, 0), (0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (3, 3)]`。
阅读全文