A * /路径查找算法的错误结果

时间:2019-01-02 18:17:44

标签: python algorithm a-star

我正在尝试设置一个路径查找器,在该路径中我通过一个迷宫(1/0的阵列,其中1个是障碍物),起点/终点,并使其返回最佳路径。

我将以下代码作为基础,并修改了“ main”函数,如下所示。 https://medium.com/@nicholas.w.swift/easy-a-star-pathfinding-7e6689c7f7b2

def main():
    maze = [[0,1,0,0,...],[0,0,0,0...],[...]...,[...]] #Example 2D List
    start = (4, 33)
    end = (200, 200)

    path = astar(maze, start, end)
    print(path)

#Create blank image for openCV
    img = np.zeros((221,221,3), np.uint8)
    x, y = 0, 0
    red = [0, 0, 255]

#Draw obstacles
    for row in maze:
        y+=1
        x=0
        for value in row:
            x+=1
            if value == 1: img[y, x]=red

#Draw path
    for x, y in path:
        img[y, x] = (255, 0, 0)

    cv2.imshow("Image", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

用来制作地图的迷宫在这里:https://pastebin.com/wT6dGQnj 这是一个较大项目的简化案例,因此列表在此处已“硬编码”。

下面是输出,由于路径越过多个障碍,这似乎是不正确的: Results

1 个答案:

答案 0 :(得分:0)

我认为问题在于您如何绘制墙壁,而不是路径。您从y=1开始,似乎也在那里切换了x和y。我在原始代码中使用了10x10迷宫,一旦按如下所示更改了墙绘部分,一切看起来就正确了:

n = 10
img = np.zeros((n,n,3), np.uint8)
x, y = 0, 0
red = [0, 0, 255]

# Draw the walls in red.  This is the part I changed.
for i in range(n):
    for j in range(n):
        if maze[i][j] == 1:
            img[i,j] = red

# Draw the path in blue
for x, y in path:
    img[x, y] = (255, 0, 0)

尽管您可以像我在这里那样进行两个嵌套的maze循环,但是可以将img映射到for,这可能是一种更有效的方法。