python用A*算法解决迷宫问题的代码
时间: 2023-12-04 07:01:31 浏览: 66
A*算法解迷宫
4星 · 用户满意度95%
可以提供,以下是示例代码:
```python
import heapq
def astar(maze, start, end):
# 获取迷宫的行数和列数
rows, cols = len(maze), len(maze[0])
# 用优先队列保存搜索节点
pq = [(0, start)]
# 初始化起点到各点的距离
dis = [[float('inf')] * cols for _ in range(rows)]
dis[start[0]][start[1]] = 0
# 用来记录搜索路径
pre = [[None] * cols for _ in range(rows)]
# 8个方向的偏移量
dirs = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
while pq:
f, cur = heapq.heappop(pq) # 取出f值最小的节点
if cur == end: # 到达终点,搜索结束
break
for d in dirs: # 搜索相邻节点
x, y = cur[0] + d[0], cur[1] + d[1]
if 0 <= x < rows and 0 <= y < cols and maze[x][y] != 1:
g = dis[cur[0]][cur[1]] + 1 # 计算g值
h = abs(x - end[0]) + abs(y - end[1]) # 计算h值
if g + h < dis[x][y]: # 更新距离和前驱节点
dis[x][y] = g + h
pre[x][y] = cur
heapq.heappush(pq, (g + h, (x, y)))
# 构造路径并返回(从终点往起点回溯)
path = []
cur = end
while cur:
path.append(cur)
cur = pre[cur[0]][cur[1]]
return list(reversed(path))
```
注意:该算法并不能保证在所有情况下都找到最优解,但是能够在较短的时间内给出一个可行解。
阅读全文