我在看维基百科上的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)。