据我所知,你从不检查你是否已经参观过广场。此外,您将使用x和y来表示非x,y坐标的值,并检查索引的一端并捕捉另一端的异常。这太复杂了。我的建议是实现实际的算法:def gen_lee(start, size, travelable):
neighbor_offsets = [(0, 1), (1, 0), (0, -1), (-1, 0)]
score = 0
path_map = [[None for _ in xrange(size)] for _ in xrange(size)]
node_list = [start]
path_map[start[0]][start[1]] = 0
for node in node_list:
score = path_map[node[0]][node[1]]
for neighbor_offset in neighbor_offsets:
neighbor_x = node[0] + neighbor_offset[0]
neighbor_y = node[1] + neighbor_offset[1]
if neighbor_x < 0 or \
neighbor_y < 0 or \
neighbor_x >= size or \
neighbor_y >= size:
continue # Skip out of map neighbors
if not travelable[neighbor_x][neighbor_y]:
continue # Skip untravelable neighbors
if path_map[neighbor_x][neighbor_y] is None:
node_list.append((neighbor_x, neighbor_y))
path_map[neighbor_x][neighbor_y] = score + 1
return path_map
利用此功能,我们可以生成路线栅格:
^{pr2}$
在没有障碍物的情况下,我们可以:for row in path_map:
print row
[2, 1, 2, 3, 4]
[1, 0, 1, 2, 3]
[2, 1, 2, 3, 4]
[3, 2, 3, 4, 5]
[4, 3, 4, 5, 6]
有障碍物:travelable = [[1, 1, 1, 0, 1],
[1, 1, 1, 0, 1],
[1, 1, 1, 0, 1],
[1, 1, 1, 0, 1],
[1, 1, 1, 1, 1]]
path_map = gen_lee((1, 1), 5, travelable)
我们得到:[2, 1, 2, None, 10]
[1, 0, 1, None, 9]
[2, 1, 2, None, 8]
[3, 2, 3, None, 7]
[4, 3, 4, 5, 6]
然后,你开始目标,然后一路往回走,找到比你目前得分低1分的邻居。这将产生一条最佳路径。(请注意,可能有多个满足此条件:您可以选择其中任何一个并找到等效路径)
如果在“查找路径”步骤的任何一点上,您找不到比您低一个的邻居(而且您还没有达到目标),则该路径将被阻止。在
本文介绍了一种Python实现的迷宫寻路算法,通过gen_lee函数生成路径地图。算法考虑了地图边界和不可通行区域,并给出了无障碍物和有障碍物的例子。在有障碍物的情况下,可以通过从目标位置回溯找到最佳路径。
919

被折叠的 条评论
为什么被折叠?



