A搜索是一种用于图或网格中路径查找的算法,它结合了最佳优先搜索和Dijkstra算法的优点。A算法通过使用启发式函数来估计从当前节点到目标节点的最小成本,从而有效地引导搜索方向,减少不必要的搜索范围。
import heapq
def heuristic(a, b):
# 曼哈顿距离
return abs(a[0] - b[0]) + abs(a[1] - b[1])
def astar(graph, start, goal):
frontier = []
heapq.heappush(frontier, (0, start))
came_from = {}
cost_so_far = {}
came_from[start] = None
cost_so_far[start] = 0
while frontier:
current = heapq.heappop(frontier)[1]
if current == goal:
break
for next in graph.neighbors(current):
new_cost = cost_so_far[current] + graph.cost(current, next)
if next not in cost_so_far or new_cost < cost_so_far[next]:
cost_so_far[next] = new_cost
priority = new_cost + heuristic(goal, next)
heapq.heappush(frontier, (priority, next))
came_from[next] = current
return came_from, cost_so_far
通过上述信息,您可以更好地理解A*搜索算法的基础概念、优势、类型、应用场景以及可能遇到的问题和解决方法。
领取专属 10元无门槛券
手把手带您无忧上云