通常在A 中获得的结果只是一条路径。给定的出发地和目的地是否有可能根据A 设置3条推荐路径?因此返回的第二条路径是第二条最佳路径,第三条是第三条最佳路径。
我正在考虑也许可以通过某种方式修改启发式方法以反映出第二和第三最佳路径。.你们怎么看?
更新: 我的实现是在PHP中,并且我使用的是封闭集。因此,如果有办法做到这一点,请告诉我。
如果您的语言支持回溯/生成器/迭代器/协程,则可以轻松完成此操作。
# 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)
该yield关键字类似return,不同之处在于功能可能是后重新进入yield,以获得一个解决方案。要获得最好的三个:
yield
return
solutions = [] i = 0 for sol in astar(start): solutions.append(sol) if i == 3: break i += 1
但是 ,如果使用 封闭集 (即Russell&Norvig的 图搜索 算法),则此方法将不起作用,因为在搜索最佳解时,部分非最优解可能会被“截断”。