我在看维基百科上的aStar psuedo代码(wikipedia:A*_search_algorithm),我对这段代码有一个问题:

for each neighbor in neighbor_nodes(current)
    tentative_g_score := g_score[current] + dist_between(current,neighbor)
    tentative_f_score := tentative_g_score + heuristic_cost_estimate(neighbor, goal)
    if neighbor in closedset and tentative_f_score >= f_score[neighbor]
        continue

在if语句的第二部分-tentative_f_score >= f_score[neighbor]-我想知道计算f_score[neighbor]与计算tentative_f_score有何不同。
基本上,我如何计算f_score[neighbor]?谢谢。

最佳答案

f_score[neighbor]是为所有节点存储的内容。这个邻居是一个节点,你已经有一个f分数,因为它已经在封闭的集合。新的f-score可能不同,因为您到达该节点的方式与以前不同,因此父节点与您为该节点存储的节点不同(因此可能也不同于g,因此也不同于f)。
基本上,这里的条件说明了如果不是这样(或者如果新的f更糟)会发生什么,那么您可以忽略该节点。
下面的代码处理到该节点的新路径比您以前到达它的路径短的情况,因此它将当前节点设置为其父节点并更新其g(因此f)。

10-07 17:55