Python 迷宫问题
时间: 2023-08-09 21:04:46 浏览: 127
Python基于递归算法实现的走迷宫问题
Python 中可以用多种算法来解决迷宫问题,其中最常用的是深度优先搜索(DFS)和广度优先搜索(BFS)。
下面是一个简单的 DFS 算法解决迷宫问题的示例代码:
```python
maze = [
[0, 0, 0, 1, 0],
[0, 1, 0, 1, 0],
[0, 1, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]
]
def dfs(maze, start, end):
rows, cols = len(maze), len(maze[0])
visited = [[False] * cols for _ in range(rows)]
path = []
def helper(i, j):
if i < 0 or i >= rows or j < 0 or j >= cols or maze[i][j] == 1 or visited[i][j]:
return False
visited[i][j] = True
path.append((i, j))
if (i, j) == end:
return True
if helper(i+1, j) or helper(i-1, j) or helper(i, j+1) or helper(i, j-1):
return True
path.pop()
return False
if helper(start[0], start[1]):
return path
else:
return []
```
这里的 `maze` 是一个二维数组,用 0 表示通路,用 1 表示墙。`start` 和 `end` 分别是起点和终点。
在 `dfs` 函数中,我们首先初始化了一个 `visited` 数组表示每个位置是否已经被访问过,以及一个 `path` 数组表示当前搜索的路径。然后定义了一个内部函数 `helper`,这个函数用来进行深度优先搜索。`helper` 函数的参数是当前位置的坐标 `(i, j)`,它首先判断这个位置是否越界、是否是墙、是否已经被访问过,如果是的话就返回 False。否则,将这个位置标记为已访问,并将其加入路径 `path` 中。如果当前位置恰好是终点,那么搜索成功,返回 True。否则,继续往上下左右四个方向搜索,如果其中任意一个方向搜索成功,那么整个搜索就成功了,返回 True。否则,将当前位置从路径 `path` 中弹出,返回 False。
最后,在 `dfs` 函数的主体中,我们调用 `helper` 函数从起点开始搜索,如果搜索成功,就返回路径 `path`,否则返回空列表 `[]`。
这个算法能够找到从起点到终点的一条路径,但是它并不一定是最短路径。如果要找到最短路径,我们可以使用广度优先搜索(BFS)算法,将每个位置到起点的距离作为状态保存在队列中,从起点开始搜索,遇到终点时就停止搜索。最后,从终点开始回溯,沿着最短路径找到起点。
阅读全文