编写一个求解迷宫问题的程序,要求输出迷宫的所有路径,并求最短路径长度及最短路径。规定: S:迷宫的入口 D:迷宫的出口 X:障碍物,无法从这里通过 *:空地 搜索顺序优先度:↑、→、↓、←。
时间: 2024-02-13 16:07:40 浏览: 92
好的,这是一个比较常见的问题,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决。这里我给出一个使用DFS的实现:
```python
# 迷宫地图
maze = [
['S', '*', '*', '*', '*', '*', '*', '*', '*', '*'],
['*', ' ', ' ', ' ', '*', ' ', '*', '*', ' ', '*'],
['*', ' ', '*', ' ', ' ', ' ', '*', '*', ' ', '*'],
['*', ' ', '*', '*', '*', '*', '*', ' ', ' ', '*'],
['*', ' ', ' ', ' ', '*', ' ', ' ', ' ', '*', '*'],
['*', '*', '*', '*', '*', '*', '*', '*', '*', '*'],
['*', ' ', ' ', '*', '*', '*', ' ', ' ', '*', '*'],
['*', ' ', ' ', ' ', '*', '*', '*', ' ', ' ', '*'],
['*', '*', ' ', '*', ' ', ' ', ' ', ' ', '*', '*'],
['*', '*', '*', '*', '*', '*', '*', '*', 'D', '*']
]
# 标记已访问过的位置
visited = [[False for j in range(10)] for i in range(10)]
# 记录路径
path = []
def dfs(x, y, steps):
if maze[x][y] == 'D':
# 到达终点
print("找到最短路径:", path)
print("最短路径长度为:", steps)
return
# 上右下左
directions = [(-1, 0), (0, 1), (1, 0), (0, -1)]
for dx, dy in directions:
nx, ny = x + dx, y + dy
if 0 <= nx < 10 and 0 <= ny < 10 and maze[nx][ny] != '*' and not visited[nx][ny]:
visited[nx][ny] = True
path.append((nx, ny))
dfs(nx, ny, steps + 1)
visited[nx][ny] = False
path.pop()
# 从起点开始搜索
start_x, start_y = 0, 0
visited[start_x][start_y] = True
path.append((start_x, start_y))
dfs(start_x, start_y, 0)
```
这个程序会输出迷宫的所有路径,并求出最短路径长度及最短路径。请注意,这里的迷宫地图是一个二维列表,其中每个元素表示迷宫中的一个位置,'S'表示起点,'D'表示终点,'*'表示障碍物,空格表示可以通过的位置。这个程序使用DFS搜索所有可能的路径,并记录最短路径的长度以及最短路径的具体路径。
阅读全文