迷宫问题:编写一个求解迷宫问题的程序,要求输出迷宫的所有路径,并求最短路径长度及最短路径。规定:S:迷宫的入口 D:迷宫的出口 X:障碍物,无法从这里通过 *:空地 搜索顺序优先度:
时间: 2024-10-23 10:07:16 浏览: 61
迷宫问题是经典的图搜索算法问题,通常使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决。对于寻找所有路径,DFS更适合,因为它能够遍历到任意路径直到找到目标;而BFS则适合找寻最短路径,因为它的搜索顺序是按距离递增的。
下面是一个简单的Python示例,使用BFS来求解最短路径和输出所有路径:
```python
from collections import deque
# 定义迷宫地图,S代表入口,D代表出口,X表示障碍
maze = [
['S', '*', '*', '*'],
['*', 'X', '*', '*'],
['*', '*', '*', 'D']
]
def is_valid(i, j):
return 0 <= i < len(maze) and 0 <= j < len(maze[0]) and maze[i][j] != 'X'
def bfs(start, end, maze):
visited = [[False]*len(maze[0]) for _ in range(len(maze))]
queue = deque([(start, [start])])
visited[start[0]][start[1]] = True
while queue:
x, path = queue.popleft()
if x == end:
print("Path found:", path)
return len(path) - 1 # 返回路径长度
for dx, dy in [(0, -1), (0, 1), (-1, 0), (1, 0)]: # 上下左右四个方向
nx, ny = x + dx, y + dy
if is_valid(nx, ny) and not visited[nx][ny]:
visited[nx][ny] = True
queue.append((nx, path + [nx]))
# 调用函数并获取最短路径长度
shortest_path_length = bfs((0, 0), (len(maze)-1, len(maze[0])-1), maze)
print(f"Shortest path length: {shortest_path_length}")
```
在这个例子中,我们首先初始化了一个访问矩阵和队列,然后按照BFS的步骤遍历迷宫。当发现终点时,会打印出到达终点的路径。同时,我们会计算并返回最短路径的长度。
阅读全文