关于A*
A*算法是一种启发式搜索的算法,通过设定合理的估价函数,我们能够减少不必要的搜索从而达到减低时间复杂度的目的。当我们计算A*算法时,我们维护一个优先队列,同时按照我们规定的估价函数来进行排序。我们这样定义一个估价函数:F=G+H。这里:
F:需要排序的估价函数值
G:从起点到当前点的花费
H:我们人为设定的估价函数值
在这里我们这样理解这个估价函数,我们从起点到终点,我们定义H为当前点到终点的距离,很显然根据G+H,绕路走的F是比较大的,F就是我们人为观感上的“绕路走”,A*的估价函数的意义就是少“绕路走”,同时我们常常使用的BFS就是没有估价函数的,所以即便一些步骤我们明明知道不会产生最优解,我们依然遍历了这些步骤,A*的估价函数则避免了这个问题。
思路
本题我们先用dijkstra计算t到每个点的距离,然后这个距离就是我们的估价函数,然后我们从s出发使用A*,然后等第k次出队列碰到t点我们输出距离。需要注意的是当s==t时k++,因为题目要求必须要走一条路。
参考
代码
1 |
|