我试图了解 A* 寻路算法,以及如何在 python 程序中实现它。我发现这个网站很好地解释了算法本身的工作原理,并提供了一些示例代码。
这是我卡住的地方:
def make_graph(mapinfo):
nodes = [[AStarGridNode(x, y) for y in range(mapinfo.height)] for x in range(mapinfo.width)]
graph = {}
for x, y in product(range(mapinfo.width), range(mapinfo.height)):
node = nodes[x][y]
graph[node] = []
for i, j in product([-1, 0, 1], [-1, 0, 1]):
if not (0 <= x + i < mapinfo.width): continue
if not (0 <= y + j < mapinfo.height): continue
graph[nodes[x][y]].append(nodes[x+i][y+j])
return graph, nodes
graph, nodes = make_graph({"width": 8, "height": 8})
paths = AStarGrid(graph)
start, end = nodes[1][1], nodes[5][7]
path = paths.search(start, end)
if path is None:
print "No path found"
else:
print "Path found:", path
我不明白“ mapinfo ”对象的外观。我通过用一些数字替换 mapinfo 变量来管理程序的工作,但无法弄清楚整个列表将如何工作,特别是如果我们想要包括墙壁。你能提供一些澄清/例子吗?