如何使用A*算法找到最好的三条路线

ahe*_*ang 5 algorithm a-star shortest-path

在A*中,通常你获得的结果只有一条路径.根据A*,对于给定的起点和终点是否有可能有3条推荐路径?所以第二个返回的是第二个最佳路径,第三个是第三个最佳路径.

我想的可能是以某种方式修改启发式以反映第二和第三条最佳路径.你们怎么想?

更新: 我的实现是在PHP中,我使用的是封闭集.所以,如果有办法做到这一点,请告诉我.

Fre*_*Foo 2

如果您的语言支持回溯/生成器/迭代器/协程,那么这可以很容易地完成。

# Python code
def astar(start):
    q = [start]    # priority queue
    while len(q) > 0:
        node = heappop(q)
        if isGoal(node):
            yield node
        for x in successors(node):
            heappush(q, x)
Run Code Online (Sandbox Code Playgroud)

yield关键字与 类似return,只不过该函数可以在 a 之后重新输入yield以获得下一个解。为了获得最好的三名:

solutions = []
i = 0
for sol in astar(start):
    solutions.append(sol)
    if i == 3:
        break
    i += 1
Run Code Online (Sandbox Code Playgroud)

然而,如果您使用闭集(即Russell & Norvig图搜索算法),这将不起作用,因为这样在搜索最佳解决方案时,部分非最佳解决方案可能会被“切断”。